! function(e) {
	if(!e.WebVideoCtrl) {
		var t = function() {
				function t() {
					this.id = this.createUUID()
				}
				var n = "100%",
					r = "100%",
					o = "",
					i = "",
					a = {
						szContainerID: "",
						szColorProperty: "",
						szOcxClassId: "clsid:E7EF736D-B4E6-4A5A-BA94-732D71107808",
						szMimeTypes: "application/hwp-webvideo-plugin",
						iWndowType: 1,
						iPlayMode: 2,
						bDebugMode: !1,
						cbSelWnd: null,
						cbEvent: null
					},
					c = null,
					u = 0,
					l = [],
					p = [],
					d = null,
					P = null,
					h = null,
					I = null,
					f = this,
					m = null,
					C = 1,
					S = 2,
					y = 200,
					g = 0,
					v = 1,
					x = 2,
					T = 3,
					z = 4,
					D = 5,
					A = 6,
					b = 0,
					M = 2,
					q = 3,
					L = 21,
					R = 0,
					G = "IPCamera",
					X = "IPDome",
					H = "IPZoom",
					w = "<?xml version='1.0' encoding='utf-8'?><FileVersion><Platform name='win32'><npWebVideoPlugin.dll>3,0,5,56</npWebVideoPlugin.dll><WebVideoActiveX.ocx>3,0,5,56</WebVideoActiveX.ocx><PlayCtrl.dll>6,5,2,40</PlayCtrl.dll><StreamTransClient.dll>1,1,2,11</StreamTransClient.dll><SystemTransform.dll>2,3,0,10</SystemTransform.dll><NetStream.dll>1,0,5,57</NetStream.dll><HCNetSDK.dll>4,2,6,7</HCNetSDK.dll><ShowRemConfig.dll>3,1,2,14</ShowRemConfig.dll></Platform></FileVersion>";
				e.GetSelectWndInfo = function(e) {
					var t = I.loadXML(e);
					console.log(e)
					u = parseInt(s.$XML(t).find("SelectWnd").eq(0).text(), 10);

					var n = [];
					n.push("<RealPlayInfo>"), n.push("<SelectWnd>" + u + "</SelectWnd>"), n.push("</RealPlayInfo>"), a.cbSelWnd && a.cbSelWnd(I.loadXML(n.join("")))
				}, e.ZoomInfoCallback = function(e) {
					var t = f.findWndIndexByIndex(u);
					if(-1 != t) {
						var s = p[t];
						if(t = f.findDeviceIndexByIP(s.szIP), -1 != t) {
							var n = l[t];
							n.oProtocolInc.set3DZoom(n, s, e, {
								success: function() {},
								error: function() {}
							})
						}
					}
				}, e.PluginEventHandler = function(e, t, s) {
					Z("插件事件：PluginEventHandler iEventType：%s iParam1: %s, iParam2: %s", e, t, s), b == e || M == e ? f.I_Stop(t) : L == e ? f.I_StopRecord(t) : q == e && f.I_StopVoiceTalk(), a.cbEvent && a.cbEvent(e, t, s)
				}, e.GetHttpInfo = function(e, t) {
					Z("http响应返回：http状态：%s, http数据：%s", e, t), et.prototype.processCallback(e, t)
				};
				var Z = function() {
						if(a.bDebugMode) {
							var e = k(arguments);
							d._alert(e)
						}
					},
					k = function() {
						for(var e = arguments[0], t = 1; t < arguments.length; t++) e = e.replace("%s", arguments[t]);
						return e
					},
					W = function(e) {
						return "undefined" == typeof e
					},
					_ = function() {
						var e = "";
						if(I.browser().msie) e = "<object classid='" + a.szOcxClassId + "' codebase='' standby='Waiting...' id='" + o + "' width='" + n + "' height='" + r + "' align='center' ><param name='wndtype' value='" + a.iWndowType + "'><param name='playmode' value='" + a.iPlayMode + "'><param name='colors' value='" + a.szColorProperty + "'></object>";
						else
							for(var t = navigator.mimeTypes.length, s = 0; t > s; s++) navigator.mimeTypes[s].type.toLowerCase() == a.szMimeTypes && (e = "<embed align='center' type='" + a.szMimeTypes + "' width='" + n + "' height='" + r + "' name='" + i + "' wndtype='" + a.iWndowType + "' playmode='" + a.iPlayMode + "' colors='" + a.szColorProperty + "'>");
						return e
					},
					E = function() {
						var e = c.HWP_GetLocalConfig();
						m = I.loadXML(e)
					},
					N = function(e) {
						f.I_GetDeviceInfo(e.szIP, {
							success: function(t) {
								e.szDeviceType = s.$XML(t).find("deviceType").eq(0).text()
							}
						}), f.I_GetAnalogChannelInfo(e.szIP, {
							success: function(t) {
								e.iAnalogChannelNum = s.$XML(t).find("VideoInputChannel", !0).length
							}
						}), f.I_GetAudioInfo(e.szIP, {
							success: function(t) {
								var n = s.$XML(t).find("audioCompressionType", !0);
								if(n.length > 0) {
									var r = s.$XML(n).eq(0).text(),
										o = 0;
									"G.711ulaw" == r ? o = 1 : "G.711alaw" == r ? o = 2 : "G.726" == r && (o = 3), e.iAudioType = o
								}
							}
						})
					},
					B = function(e) {
						var t = -1,
							s = -1,
							n = -1,
							r = null;
						if(O(e)) r = F(e), t = r.iRtspPort, n = r.iDevicePort;
						else {
							for(var o = V(e), i = !1, a = 0; a < o.length; a++)
								if(o[a].ipv4 == e.szIP || o[a].ipv6 == e.szIP) {
									i = !0;
									break
								}
							i ? r = F(e) : (r = U(e), -1 == t && -1 == n && (r = F(e))), t = r.iRtspPort, s = r.iHttpPort, n = r.iDevicePort
						}
						return r
					},
					F = function(e) {
						var t = -1,
							n = -1,
							r = -1;
						return e.oProtocolInc.getPortInfo(e, {
							async: !1,
							success: function(e) {
								for(var o = s.$XML(e).find("AdminAccessProtocol", !0), i = 0, a = o.length; a > i; i++) "rtsp" === s.$XML(o).eq(i).find("protocol").eq(0).text().toLowerCase() && (t = parseInt(s.$XML(o).eq(i).find("portNo").eq(0).text(), 10)), "http" === s.$XML(o).eq(i).find("protocol").eq(0).text().toLowerCase() && (n = parseInt(s.$XML(o).eq(i).find("portNo").eq(0).text(), 10)), "dev_manage" === s.$XML(o).eq(i).find("protocol").eq(0).text().toLowerCase() && (r = parseInt(s.$XML(o).eq(i).find("portNo").eq(0).text(), 10))
							},
							error: function() {
								t = -1, n = -1, r = -1
							}
						}), {
							iRtspPort: t,
							iHttpPort: n,
							iDevicePort: r
						}
					},
					U = function(e) {
						var t = -1,
							n = -1,
							r = -1;
						return e.oProtocolInc.getUPnPPortStatus(e, {
							async: !1,
							success: function(e) {
								for(var o = s.$XML(e).find("portStatus", !0), i = 0, a = o.length; a > i; i++) "rtsp" == s.$XML(o).eq(i).find("internalPort").eq(0).text().toLowerCase() && (t = parseInt(s.$XML(o).eq(i).find("externalPort").eq(0).text(), 10)), "http" == s.$XML(o).eq(i).find("internalPort").eq(0).text().toLowerCase() && (n = parseInt(s.$XML(o).eq(i).find("externalPort").eq(0).text(), 10)), "admin" == s.$XML(o).eq(i).find("internalPort").eq(0).text().toLowerCase() && (r = parseInt(s.$XML(o).eq(i).find("externalPort").eq(0).text(), 10))
							},
							error: function() {
								t = -1, n = -1, r = -1
							}
						}), {
							iRtspPort: t,
							iHttpPort: n,
							iDevicePort: r
						}
					},
					V = function(e) {
						var t = [];
						return e.oProtocolInc.getNetworkBond(e, {
							async: !1,
							success: function(n) {
								"true" == s.$XML(n).find("enabled").eq(0).text() ? t.push({
									ipv4: s.$XML(n).find("ipAddress").eq(0).text(),
									ipv6: s.$XML(n).find("ipv6Address").eq(0).text()
								}) : e.oProtocolInc.getNetworkInterface(e, {
									async: !1,
									success: function(e) {
										for(var n = s.$XML(e).find("NetworkInterface", !0), r = 0, o = n.length; o > r; r++) {
											t.push({
												ipv4: s.$XML(e).find("ipAddress").eq(0).text(),
												ipv6: s.$XML(e).find("ipv6Address").eq(0).text()
											});
											break
										}
									},
									error: function() {}
								})
							},
							error: function() {
								e.oProtocolInc.getNetworkInterface(e, {
									success: function(e) {
										for(var n = s.$XML(e).find("NetworkInterface", !0), r = 0, o = n.length; o > r; r++) {
											t.push({
												ipv4: s.$XML(e).find("ipAddress").eq(0).text(),
												ipv6: s.$XML(e).find("ipv6Address").eq(0).text()
											});
											break
										}
									},
									error: function() {}
								})
							}
						}), t
					},
					O = function(e) {
						var t = !1;
						return e.oProtocolInc.getPPPoEStatus(e, {
							async: !1,
							success: function(e) {
								t = s.$XML(e).find("ipAddress", !0).length > 0 ? !0 : s.$XML(e).find("ipv6Address", !0).length > 0 ? !0 : !1
							},
							error: function() {
								t = !1
							}
						}), t
					},
					j = function(e) {
						e.oStreamCapa.bObtained || e.oProtocolInc instanceof tt && (G == e.szDeviceType || X == e.szDeviceType || H == e.szDeviceType ? e.oProtocolInc.getStreamChannels(e, {
							async: !1,
							success: function(t) {
								e.oStreamCapa.bObtained = !0;
								for(var s = $(t).find("streamingTransport", !0).length, n = 0; s > n; n++)
									if("shttp" == $(t).find("streamingTransport").eq(n).text().toLowerCase()) {
										e.oStreamCapa.bObtained = !0, e.oStreamCapa.bSupportShttpPlay = !0, e.oStreamCapa.bSupportShttpPlayback = !0, e.oStreamCapa.bSupportShttpsPlay = !0, e.oStreamCapa.bSupportShttpsPlayback = !0, e.oStreamCapa.iIpChanBase = 1;
										break
									}
							},
							error: function() {}
						}) : e.oProtocolInc.getSDKCapa(e, {
							async: !1,
							success: function(t) {
								e.oStreamCapa.bObtained = !0, e.oStreamCapa.bSupportShttpPlay = "true" === s.$XML(t).find("isSupportHttpPlay").eq(0).text(), e.oStreamCapa.bSupportShttpPlayback = "true" === s.$XML(t).find("isSupportHttpPlayback").eq(0).text(), e.oStreamCapa.bSupportShttpsPlay = "true" === s.$XML(t).find("isSupportHttpsPlay").eq(0).text(), e.oStreamCapa.bSupportShttpsPlayback = "true" === s.$XML(t).find("isSupportHttpsPlayback").eq(0).text(), e.oStreamCapa.bSupportShttpPlaybackTransCode = "true" === s.$XML(t).find("isSupportHttpTransCodePlayback").eq(0).text(), e.oStreamCapa.bSupportShttpsPlaybackTransCode = "true" === s.$XML(t).find("isSupportHttpsTransCodePlayback").eq(0).text(), s.$XML(t).find("ipChanBase", !0).length > 0 && (e.oStreamCapa.iIpChanBase = parseInt(s.$XML(t).find("ipChanBase").eq(0).text(), 10))
							},
							error: function() {
								e.oStreamCapa.bObtained = !0
							}
						}))
					},
					K = function(e) {
						var t = {
							TransFrameRate: "",
							TransResolution: "",
							TransBitrate: ""
						};
						if(I.extend(t, e), "" == t.TransFrameRate || "" == t.TransResolution || "" == t.TransBitrate) return "";
						var s = [];
						return s.push("<?xml version='1.0' encoding='UTF-8'?>"), s.push("<CompressionInfo>"), s.push("<TransFrameRate>" + t.TransFrameRate + "</TransFrameRate>"), s.push("<TransResolution>" + t.TransResolution + "</TransResolution>"), s.push("<TransBitrate>" + t.TransBitrate + "</TransBitrate>"), s.push("</CompressionInfo>"), s.join("")
					};
				this.I_InitPlugin = function(e, t, s) {
					n = e, r = t, I.extend(a, s)
				}, this.I_InsertOBJECTPlugin = function(t) {
					return W(t) || (a.szContainerID = t), null == document.getElementById(a.szContainerID) ? -1 : null != document.getElementById(o) || 0 != document.getElementsByName(o).length ? -1 : (document.getElementById(a.szContainerID).innerHTML = _(), c = I.browser().msie ? document.getElementById(o) : document.getElementsByName(i)[0], null == c && null == c.object ? -1 : ("object" == typeof e.attachEvent && I.browser().msie && (c.attachEvent("GetSelectWndInfo", GetSelectWndInfo), c.attachEvent("ZoomInfoCallback", ZoomInfoCallback), c.attachEvent("GetHttpInfo", GetHttpInfo), c.attachEvent("PluginEventHandler", PluginEventHandler)), E(), 0))
				}, this.I_WriteOBJECT_XHTML = function() {
					console.log()
					return document.writeln(_()), c = I.browser().msie ? document.getElementById(o) : document.getElementsByName(i)[0], null == c && null == c.object ? -1 : (I.browser().msie && (c.attachEvent("GetSelectWndInfo", GetSelectWndInfo), c.attachEvent("ZoomInfoCallback", ZoomInfoCallback), c.attachEvent("GetHttpInfo", GetHttpInfo), c.attachEvent("PluginEventHandler", PluginEventHandler)), E(), 0)
				}, this.I_OpenFileDlg = function(e) {
					var t = c.HWP_OpenFileBrowser(e, "");
					if(null == t) return "";
					if(1 == e) {
						if(t.length > 100) return -1
					} else if(t.length > 130) return -1;
					return t
				}, this.I_GetLocalCfg = function() {
					var e = c.HWP_GetLocalConfig(),
						t = [];
					return m = I.loadXML(e), t.push("<LocalConfigInfo>"), t.push("<ProtocolType>" + s.$XML(m).find("ProtocolType").eq(0).text() + "</ProtocolType>"), t.push("<PackgeSize>" + s.$XML(m).find("PackgeSize").eq(0).text() + "</PackgeSize>"), t.push("<PlayWndType>" + s.$XML(m).find("PlayWndType").eq(0).text() + "</PlayWndType>"), t.push("<BuffNumberType>" + s.$XML(m).find("BuffNumberType").eq(0).text() + "</BuffNumberType>"), t.push("<RecordPath>" + s.$XML(m).find("RecordPath").eq(0).text() + "</RecordPath>"), t.push("<CapturePath>" + s.$XML(m).find("CapturePath").eq(0).text() + "</CapturePath>"), t.push("<PlaybackFilePath>" + s.$XML(m).find("PlaybackFilePath").eq(0).text() + "</PlaybackFilePath>"), t.push("<PlaybackPicPath>" + s.$XML(m).find("PlaybackPicPath").eq(0).text() + "</PlaybackPicPath>"), t.push("<DownloadPath>" + s.$XML(m).find("DownloadPath").eq(0).text() + "</DownloadPath>"), t.push("<IVSMode>" + s.$XML(m).find("IVSMode").eq(0).text() + "</IVSMode>"), t.push("<CaptureFileFormat>" + s.$XML(m).find("CaptureFileFormat").eq(0).text() + "</CaptureFileFormat>"), t.push("</LocalConfigInfo>"), I.loadXML(t.join(""))
				}, this.I_SetLocalCfg = function(e) {
					var t = I.loadXML(e),
						n = -1;
					return s.$XML(m).find("ProtocolType").eq(0).text(s.$XML(t).find("ProtocolType").eq(0).text()), s.$XML(m).find("PackgeSize").eq(0).text(s.$XML(t).find("PackgeSize").eq(0).text()), s.$XML(m).find("PlayWndType").eq(0).text(s.$XML(t).find("PlayWndType").eq(0).text()), s.$XML(m).find("BuffNumberType").eq(0).text(s.$XML(t).find("BuffNumberType").eq(0).text()), s.$XML(m).find("RecordPath").eq(0).text(s.$XML(t).find("RecordPath").eq(0).text()), s.$XML(m).find("CapturePath").eq(0).text(s.$XML(t).find("CapturePath").eq(0).text()), s.$XML(m).find("PlaybackFilePath").eq(0).text(s.$XML(t).find("PlaybackFilePath").eq(0).text()), s.$XML(m).find("PlaybackPicPath").eq(0).text(s.$XML(t).find("PlaybackPicPath").eq(0).text()), s.$XML(m).find("DownloadPath").eq(0).text(s.$XML(t).find("DownloadPath").eq(0).text()), s.$XML(m).find("IVSMode").eq(0).text(s.$XML(t).find("IVSMode").eq(0).text()), s.$XML(m).find("CaptureFileFormat").eq(0).text(s.$XML(t).find("CaptureFileFormat").eq(0).text()), n = c.HWP_SetLocalConfig(I.toXMLStr(m)), n ? 0 : -1
				};
				var Y = function(e, t, s, n, r, o, i) {
					var a = {
						protocol: t,
						success: null,
						error: null
					};
					I.extend(a, i), I.extend(a, {
						success: function(a) {
							var c = new J;
							c.szIP = e, 2 == t ? (c.szHttpProtocol = "https://", c.iHttpsPort = s) : (c.szHttpProtocol = "http://", c.iHttpPort = s), c.iCGIPort = s, c.szAuth = n, c.iDeviceProtocol = r, c.oProtocolInc = o, l.push(c), Z("使用%s协议登录成功", r), N(c), i.success && i.success(a)
						},
						error: function(e, t) {
							i.error && i.error(e, t)
						}
					}), o.login(e, s, n, a)
				};
				this.I_Login = function(e, t, s, n, r, o) {
					var i = this.findDeviceIndexByIP(e);
					if(-1 != i) return Z("设备已经登录过"), -1;
					var a = P,
						c = C;
					W(o.cgi) || (C == o.cgi ? (a = P, c = C) : (a = h, c = S));
					var u = "";
					if(C == c) {
						u = I.Base64.encode(":" + n + ":" + r);
						var l = {
							success: null,
							error: null
						};
						I.extend(l, o), I.extend(l, {
							error: function(i, l) {
								u = I.Base64.encode(n + ":" + r), c = C, a = P;
								var p = {
									success: null,
									error: null
								};
								I.extend(p, o), I.extend(p, {
									error: function() {
										if(!W(o.cgi)) return void(o.error && o.error(i, l));
										u = I.Base64.encode(n + ":" + r), c = S, a = h;
										var p = {
											success: null,
											error: null
										};
										I.extend(p, o), I.extend(p, {
											error: function(e, t) {
												o.error && o.error(e, t)
											}
										}), Y(e, t, s, u, c, a, p)
									}
								}), Y(e, t, s, u, c, a, p)
							}
						}), Y(e, t, s, u, c, a, l)
					} else {
						u = I.Base64.encode(n + ":" + r), c = S, a = h;
						var l = {
							success: null,
							error: null
						};
						I.extend(l, o), I.extend(l, {
							error: function(e, t) {
								o.error && o.error(e, t)
							}
						}), Y(e, t, s, u, c, a, l)
					}
				}, this.I_Logout = function(e) {
					var t = this.findDeviceIndexByIP(e);
					return -1 != t ? (l.splice(t, 1), 0) : -1
				}, this.I_GetAudioInfo = function(e, t) {
					var s = this.findDeviceIndexByIP(e);
					if(-1 != s) {
						var n = l[s],
							r = {
								success: null,
								error: null
							};
						I.extend(r, t), n.oProtocolInc.getAudioInfo(n, r)
					}
				}, this.I_GetDeviceInfo = function(e, t) {
					var s = this.findDeviceIndexByIP(e);
					if(-1 != s) {
						var n = l[s],
							r = {
								success: null,
								error: null
							};
						I.extend(r, t), n.oProtocolInc.getDeviceInfo(n, r)
					}
				}, this.I_GetAnalogChannelInfo = function(e, t) {
					var s = this.findDeviceIndexByIP(e);
					if(-1 != s) {
						var n = l[s],
							r = {
								success: null,
								error: null
							};
						I.extend(r, t), n.oProtocolInc.getAnalogChannelInfo(n, r)
					}
				}, this.I_GetDigitalChannelInfo = function(e, t) {
					var s = this.findDeviceIndexByIP(e);
					if(-1 != s) {
						var n = l[s],
							r = {
								success: null,
								error: null
							};
						I.extend(r, t), n.oProtocolInc.getDigitalChannelInfo(n, r)
					}
				}, this.I_GetZeroChannelInfo = function(e, t) {
					var s = this.findDeviceIndexByIP(e);
					if(-1 != s) {
						var n = l[s],
							r = {
								success: null,
								error: null
							};
						I.extend(r, t), n.oProtocolInc.getZeroChannelInfo(n, r)
					}
				}, this.I_StartRealPlay = function(e, t,num) {
//					alert('cc')
                     u = num
					var n = this.findDeviceIndexByIP(e),
						r = -1,
						o = "",
						i = "",
						a = -1,
						c = 0,
						d = 0,
						P = !1,
						h = {
							iWndIndex:u,
							iStreamType: 1,
							iChannelID: 1,
							bZeroChannel: !1
						};
					if(I.extend(h, t), -1 != n) {
						j(l[n]);
						var f = l[n],
							C = parseInt(s.$XML(m).find("ProtocolType").eq(0).text(), 10);
						if(C == R && f.oStreamCapa.bSupportShttpPlay ? (Z("SHTTP RealPlay"), o = f.oProtocolInc.CGI.startShttpRealPlay, i = "http://", d = h.iStreamType - 1, c = h.iChannelID <= f.iAnalogChannelNum ? h.iChannelID : f.oStreamCapa.iIpChanBase + parseInt(h.iChannelID, 10) - f.iAnalogChannelNum - 1, P = !0, W(h.iPort) ? "https://" == f.szHttpProtocol ? (-1 == f.iHttpPort && (f.iHttpPort = B(f).iHttpPort), a = f.iHttpPort) : a = f.iCGIPort : (f.iHttpPort = h.iPort, a = h.iPort)) : (Z("RTSP RealPlay"), o = f.oProtocolInc.CGI.startRealPlay, i = "rtsp://", d = h.iStreamType, c = h.iChannelID, W(h.iPort) || (f.iRtspPort = h.iPort), -1 == f.iRtspPort && (f.iRtspPort = B(f).iRtspPort), a = f.iRtspPort), -1 == a) return Z("获取端口号失败"), r;
						if(I.extend(h, {
								urlProtocol: i,
								cgi: o,
								iPort: a,
								iStreamType: d,
								iChannelID: c
							}), n = this.findWndIndexByIndex(h.iWndIndex), -1 == n && (r = f.oProtocolInc.startRealPlay(f, h)), -1 == r) f.iRtspPort = -1;
						else {

							n = this.findWndIndexByIndex(h.iWndIndex);
							console.log(n)
							var S = p[n];
							S.bShttpIPChannel = P
						}
					}
					return r
				}, this.I_Stop = function(e) {
					e = W(e) ? u : e;
					var t = this.findWndIndexByIndex(e),
						s = -1;
					if(-1 != t) {
						var n = p[t];
						n.bRecord && c.HWP_StopSave(n.iIndex), n.bSound && c.HWP_CloseSound(), n.bEZoom && c.HWP_DisableZoom(n.iIndex), s = c.HWP_Stop(e), 0 == s && p.splice(t, 1)
					}
					return s
				}, this.I_OpenSound = function(e) {
					e = W(e) ? u : e;
					var t = this.findWndIndexByIndex(e),
						s = -1;
					if(-1 != t) {
						var n = p[t];
						n.bSound || (s = c.HWP_OpenSound(e), 0 == s && (n.bSound = !0))
					}
					return s
				}, this.I_CloseSound = function(e) {
					e = W(e) ? u : e;
					var t = this.findWndIndexByIndex(e),
						s = -1;
					if(-1 != t) {
						var n = p[t];
						n.bSound && (s = c.HWP_CloseSound(), 0 == s && (n.bSound = !1))
					}
					return s
				}, this.I_SetVolume = function(e, t) {
					t = W(t) ? u : t;
					var s = this.findWndIndexByIndex(t),
						n = -1;
					return -1 != s && (n = c.HWP_SetVolume(t, e)), n
				}, this.I_CapturePic = function(e, t) {
					t = W(t) ? u : t;
					var s = this.findWndIndexByIndex(t),
						n = -1;
					return -1 != s && (n = c.HWP_CapturePicture(t, e)), n
				}, this.I_StartRecord = function(e, t) {
//					t = 1;//W(t) ? u : t

					var s = this.findWndIndexByIndex(t),
						n = -1;
					if(-1 != s) {
						var r = p[s];
						r.bRecord || (n = c.HWP_StartSave(t, e), 0 == n && (r.bRecord = !0))
					}
					return n
				}, this.I_StopRecord = function(e) {
//					e = 1//W(e) ? u : e;
					var t = this.findWndIndexByIndex(e),
						s = -1;
					if(-1 != t) {
						var n = p[t];
						n.bRecord && (s = c.HWP_StopSave(e), 0 == s && (n.bRecord = !1))
					}
					return s
				}, this.I_StartVoiceTalk = function(e, t) {
					if(isNaN(parseInt(t, 10))) return -1;
					var s = this.findDeviceIndexByIP(e),
						n = -1;
					if(-1 != s) {
						var r = l[s];
						r.bVoiceTalk || (n = r.oProtocolInc.startVoiceTalk(r, t), 0 == n && (l[s].bVoiceTalk = !0))
					}
					return n
				}, this.I_StopVoiceTalk = function() {
					for(var e = c.HWP_StopVoiceTalk(), t = 0, s = l.length; s > t; t++)
						if(l[t].bVoiceTalk) {
							l[t].bVoiceTalk = !1;
							break
						}
					return e
				}, this.I_PTZControl = function(e, t, s) {
					var n = {
						iWndIndex: u,
						iPTZIndex: e,
						iPTZSpeed: 4
					};
					I.extend(n, s), I.extend(n, {
						async: !1
					});
					var r = this.findWndIndexByIndex(n.iWndIndex);
					if(-1 != r) {
						var o = p[r];
						if(r = this.findDeviceIndexByIP(o.szIP), -1 != r) {
							var i = l[r];
							9 == e ? i.oProtocolInc.ptzAutoControl(i, t, o, n) : i.oProtocolInc.ptzControl(i, t, o, n)
						}
					}
				}, this.I_EnableEZoom = function(e) {
					e = W(e) ? u : e;
					var t = this.findWndIndexByIndex(e),
						s = -1;
					if(-1 != t) {
						var n = p[t];
						n.bEZoom || (s = c.HWP_EnableZoom(e, 0), 0 == s && (n.bEZoom = !0))
					}
					return s
				}, this.I_DisableEZoom = function(e) {
					e = W(e) ? u : e;
					var t = this.findWndIndexByIndex(e),
						s = -1;
					if(-1 != t) {
						var n = p[t];
						if(n.bEZoom) return c.HWP_DisableZoom(e), n.bEZoom = !1, 0
					}
					return s
				}, this.I_Enable3DZoom = function(e) {
					e = W(e) ? u : e;
					var t = this.findWndIndexByIndex(e),
						s = -1;
					if(-1 != t) {
						var n = p[t];
						n.b3DZoom || (s = c.HWP_EnableZoom(e, 1), 0 == s && (n.b3DZoom = !0))
					}
					return s
				}, this.I_Disable3DZoom = function(e) {
					e = W(e) ? u : e;
					var t = this.findWndIndexByIndex(e),
						s = -1;
					if(-1 != t) {
						var n = p[t];
						if(n.b3DZoom) return c.HWP_DisableZoom(e), n.b3DZoom = !1, 0
					}
					return s
				}, this.I_FullScreen = function(e) {
					c.HWP_FullScreenDisplay(e)
				}, this.I_SetPreset = function(e, t) {
					var s = {
						iWndIndex: u,
						iPresetID: e
					};
					I.extend(s, t);
					var n = this.findWndIndexByIndex(s.iWndIndex);
					if(-1 != n) {
						var r = p[n];
						if(n = this.findDeviceIndexByIP(r.szIP), -1 != n) {
							var o = l[n];
							o.oProtocolInc.setPreset(o, r, s)
						}
					}
				}, this.I_GoPreset = function(e, t) {
					var s = {
						iWndIndex: u,
						iPresetID: e
					};
					I.extend(s, t);
					var n = this.findWndIndexByIndex(s.iWndIndex);
					if(-1 != n) {
						var r = p[n];
						if(n = this.findDeviceIndexByIP(r.szIP), -1 != n) {
							var o = l[n];
							o.oProtocolInc.goPreset(o, r, s)
						}
					}
				}, this.I_RecordSearch = function(e, t, s, n, r) {
					var o = this.findDeviceIndexByIP(e);
					if(-1 != o) {
						var i = l[o],
							a = {
								iChannelID: t,
								szStartTime: s,
								szEndTime: n,
								iSearchPos: 0,
								success: null,
								error: null
							};
						I.extend(a, r), i.oProtocolInc.recordSearch(i, a)
					}
				}, this.I_StartPlayback = function(e, t) {
					var n = this.findDeviceIndexByIP(e),
						r = -1,
						o = "",
						i = "",
						a = -1,
						c = 1,
						p = I.dateFormat(new Date, "yyyy-MM-dd"),
						d = {
							iWndIndex: u,
							iChannelID: 1,
							szStartTime: p + " 00:00:00",
							szEndTime: p + " 23:59:59"
						};
					if(I.extend(d, t), -1 != n) {
						j(l[n]);
						var P = l[n],
							h = parseInt(s.$XML(m).find("ProtocolType").eq(0).text(), 10);
						if(h == R && P.oStreamCapa.bSupportShttpPlay ? (o = W(d.oTransCodeParam) ? P.oProtocolInc.CGI.startShttpPlayback : P.oProtocolInc.CGI.startTransCodePlayback, i = "http://", c = d.iChannelID <= P.iAnalogChannelNum ? d.iChannelID : P.oStreamCapa.iIpChanBase + parseInt(d.iChannelID, 10) - P.iAnalogChannelNum - 1, W(d.iPort) ? "https://" == P.szHttpProtocol ? (-1 == P.iHttpPort && (P.iHttpPort = B(P).iHttpPort), a = P.iHttpPort) : a = P.iCGIPort : (P.iHttpPort = d.iPort, a = d.iPort)) : (o = P.oProtocolInc.CGI.startPlayback, i = "rtsp://", c = 100 * d.iChannelID + 1, W(d.iPort) || (P.iRtspPort = d.iPort), -1 == P.iRtspPort && (P.iRtspPort = B(P).iRtspPort), a = P.iRtspPort), -1 == a) return Z("获取端口号失败"), r;
						I.extend(d, {
							urlProtocol: i,
							cgi: o,
							iPort: a,
							iChannelID: c
						}), n = this.findWndIndexByIndex(d.iWndIndex), -1 == n && (d.szStartTime = d.szStartTime.replace(/[-:]/g, "").replace(" ", "T") + "Z", d.szEndTime = d.szEndTime.replace(/[-:]/g, "").replace(" ", "T") + "Z", r = P.oProtocolInc.startPlayback(P, d)), -1 == r && (P.iRtspPort = -1)
					}
					return r
				}, this.I_ReversePlayback = function(e, t) {
					var n = this.findDeviceIndexByIP(e),
						r = -1,
						o = "",
						i = "",
						a = -1,
						c = -1,
						p = I.dateFormat(new Date, "yyyy-MM-dd"),
						d = {
							iWndIndex: u,
							iChannelID: 1,
							bZeroChannel: !1,
							szStartTime: p + " 00:00:00",
							szEndTime: p + " 23:59:59"
						};
					if(I.extend(d, t), -1 != n) {
						j(l[n]);
						var P = l[n],
							h = parseInt(s.$XML(m).find("ProtocolType").eq(0).text(), 10);
						if(h == R && P.oStreamCapa.bSupportShttpPlay ? (o = P.oProtocolInc.CGI.startShttpReversePlayback, i = "http://", c = d.iChannelID <= P.iAnalogChannelNum ? d.iChannelID : P.oStreamCapa.iIpChanBase + parseInt(d.iChannelID, 10) - P.iAnalogChannelNum - 1, W(d.iPort) ? "https://" == P.szHttpProtocol ? (-1 == P.iHttpPort && (P.iHttpPort = B(P).iHttpPort), a = P.iHttpPort) : a = P.iCGIPort : (P.iHttpPort = d.iPort, a = d.iPort)) : (o = P.oProtocolInc.CGI.startPlayback, i = "rtsp://", c = 100 * d.iChannelID + 1, W(d.iPort) || (P.iRtspPort = d.iPort), -1 == P.iRtspPort && (P.iRtspPort = B(P).iRtspPort), a = P.iRtspPort), -1 == a) return Z("获取端口号失败"), r;
						I.extend(d, {
							urlProtocol: i,
							cgi: o,
							iPort: a,
							iChannelID: c
						}), n = this.findWndIndexByIndex(d.iWndIndex), -1 == n && (d.szStartTime = d.szStartTime.replace(/[-:]/g, "").replace(" ", "T") + "Z", d.szEndTime = d.szEndTime.replace(/[-:]/g, "").replace(" ", "T") + "Z", r = P.oProtocolInc.reversePlayback(P, d))
					}
					return -1 == r && (P.iRtspPort = -1), r
				}, this.I_Frame = function(e) {
					e = W(e) ? u : e;
					var t = this.findWndIndexByIndex(e),
						s = -1;
					if(-1 != t) {
						var n = p[t],
							r = n.iPlayStatus;
						(r == x || r == z) && (s = c.HWP_FrameForward(e), 0 == s && (n.iPlayStatus = z))
					}
					return s
				}, this.I_Pause = function(e) {
					e = W(e) ? u : e;
					var t = this.findWndIndexByIndex(e),
						s = -1;
					if(-1 != t) {
						var n = p[t],
							r = n.iPlayStatus;
						r == x ? (s = c.HWP_Pause(e), 0 == s && (n.iPlayStatus = T)) : r == D && (s = c.HWP_Pause(e), 0 == s && (n.iPlayStatus = A))
					}
					return s
				}, this.I_Resume = function(e) {
					e = W(e) ? u : e;
					var t = this.findWndIndexByIndex(e),
						s = -1;
					if(-1 != t) {
						var n = p[t],
							r = n.iPlayStatus;
						r == T || r == z ? (s = c.HWP_Resume(e), 0 == s && (n.iPlayStatus = x)) : r == A && (s = c.HWP_Resume(e), 0 == s && (n.iPlayStatus = D))
					}
					return s
				}, this.I_PlaySlow = function(e) {
					e = W(e) ? u : e;
					var t = this.findWndIndexByIndex(e),
						s = -1;
					if(-1 != t) {
						var n = p[t];
						n.iPlayStatus == x && (s = c.HWP_Slow(e))
					}
					return s
				}, this.I_PlayFast = function(e) {
					e = W(e) ? u : e;
					var t = this.findWndIndexByIndex(e),
						s = -1;
					if(-1 != t) {
						var n = p[t];
						n.iPlayStatus == x && (s = c.HWP_Fast(e))
					}
					return s
				}, this.I_GetOSDTime = function(e) {
					e = W(e) ? u : e;
					var t = this.findWndIndexByIndex(e),
						s = -1;
					if(-1 != t) {
						var n = c.HWP_GetOSDTime(e);
						return I.dateFormat(new Date(1e3 * n), "yyyy-MM-dd hh:mm:ss")
					}
					return s
				}, this.I_StartDownloadRecord = function(e, t, s) {
					var n = this.findDeviceIndexByIP(e),
						r = -1;
					if(-1 != n) {
						var o = l[n],
							i = {
								szPlaybackURI: t,
								szFileName: s
							};
						r = o.oProtocolInc.startDownloadRecord(o, i)
					}
					return r
				}, this.I_GetDownloadStatus = function(e) {
					return c.HWP_GetDownloadStatus(e)
				}, this.I_GetDownloadProgress = function(e) {
					return c.HWP_GetDownloadProgress(e)
				}, this.I_StopDownloadRecord = function(e) {
					return c.HWP_StopDownload(e)
				}, this.I_ExportDeviceConfig = function(e) {
					var t = this.findDeviceIndexByIP(e);
					if(-1 != t) {
						var s = l[t];
						return s.oProtocolInc.exportDeviceConfig(s)
					}
				}, this.I_ImportDeviceConfig = function(e, t) {
					var s = this.findDeviceIndexByIP(e),
						n = -1;
					if(-1 != s) {
						var r = l[s],
							o = {
								szFileName: t
							};
						n = r.oProtocolInc.importDeviceConfig(r, o)
					}
					return n
				}, this.I_RestoreDefault = function(e, t, s) {
					var n = {
						success: null,
						error: null
					};
					I.extend(n, s);
					var r = this.findDeviceIndexByIP(e);
					if(-1 != r) {
						var o = l[r];
						o.oProtocolInc.restore(o, t, n)
					}
				}, this.I_Restart = function(e, t) {
					var s = this.findDeviceIndexByIP(e),
						n = {
							success: null,
							error: null
						};
					if(I.extend(n, t), -1 != s) {
						var r = l[s];
						r.oProtocolInc.restart(r, n)
					}
				}, this.I_Reconnect = function(e, t) {
					var s = this.findDeviceIndexByIP(e),
						n = {
							success: null,
							error: null
						};
					if(I.extend(n, t), -1 != s) {
						var r = l[s];
						r.oProtocolInc.login(r.szIP, r.iCGIPort, r.szAuth, n)
					}
				}, this.I_StartUpgrade = function(e, t) {
					var s = this.findDeviceIndexByIP(e),
						n = -1;
					if(-1 != s) {
						var r = l[s],
							o = {
								szFileName: t
							};
						n = r.oProtocolInc.startUpgrade(r, o)
					}
					return n
				}, this.I_UpgradeStatus = function() {
					return c.HWP_UpgradeStatus()
				}, this.I_UpgradeProgress = function() {
					return c.HWP_UpgradeProgress()
				}, this.I_StopUpgrade = function() {
					return c.HWP_StopUpgrade()
				}, this.I_CheckPluginInstall = function() {
					var e = !1;
					if(I.browser().msie) try {
						{
							new ActiveXObject("WebVideoActiveX.WebVideoActiveXCtrl.1")
						}
						e = !0
					} catch(t) {} else
						for(var s = 0, n = navigator.mimeTypes.length; n > s; s++)
							if("application/hwp-webvideo-plugin" == navigator.mimeTypes[s].type.toLowerCase()) {
								e = !0;
								break
							}
					return e ? 0 : -1
				}, this.I_CheckPluginVersion = function() {
					return c.HWP_CheckPluginUpdate(w) ? -1 : 0
				}, this.I_RemoteConfig = function(e, t) {
					var s = this.findDeviceIndexByIP(e),
						n = -1,
						r = -1,
						o = {
							iLan: 0,
							iDevicePort: -1,
							iType: 0
						};
					if(I.extend(o, t), -1 != s) {
						var i = l[s];
						if(-1 == o.iDevicePort)
							if(-1 == i.iDevicePort) {
								if(i.iDevicePort = B(i).iDevicePort, r = i.iDevicePort, -1 == r) return n
							} else r = i.iDevicePort;
						else r = o.iDevicePort;
						if(":" == I.Base64.decode(i.szAuth)[0]) var a = I.Base64.decode(i.szAuth).split(":")[1],
							u = I.Base64.decode(i.szAuth).split(":")[2];
						else var a = I.Base64.decode(i.szAuth).split(":")[0],
							u = I.Base64.decode(i.szAuth).split(":")[1];
						var p = "<RemoteInfo><DeviceInfo><DeviceType>" + o.iType + "</DeviceType><LanType>" + o.iLan + "</LanType><IP>" + e + "</IP><Port>" + r + "</Port><UName>" + a + "</UName><PWD>" + I.Base64.encode(u) + "</PWD></DeviceInfo></RemoteInfo>";
						return c.HWP_ShowRemConfig(p)
					}
					return n
				}, this.I_ChangeWndNum = function(e) {
					return isNaN(parseInt(e, 10)) ? -1 : void c.HWP_ArrangeWindow(e)
				}, this.I_GetLastError = function() {
					return c.HWP_GetLastError()
				}, this.I_GetWindowStatus = function(e) {
					if(W(e)) {
						var t = [];
						return I.extend(t, p), t
					}
					var s = this.findWndIndexByIndex(e);
					return -1 != s ? p[s] : null
				}, this.I_GetIPInfoByMode = function(e, t, s, n) {
					return c.HWP_GetIpInfoByMode(e, t, s, n)
				}, this.findDeviceIndexByIP = function(e) {
					for(var t = 0; t < l.length; t++)
						if(l[t].szIP == e) return t;
					return -1
				}, this.findWndIndexByIndex = function(e) {
					for(var t = 0; t < p.length; t++)
						if(p[t].iIndex == e) return t;
					return -1
				};
				var J = function() {
						this.szIP = "", this.szHostName = "", this.szAuth = "", this.szHttpProtocol = "http://", this.iCGIPort = 80, this.iDevicePort = -1, this.iHttpPort = -1, this.iHttpsPort = -1, this.iRtspPort = -1, this.iAudioType = 1, this.iDeviceProtocol = C, this.oProtocolInc = null, this.iAnalogChannelNum = 0, this.szDeviceType = "", this.bVoiceTalk = !1, this.oStreamCapa = {
							bObtained: !1,
							bSupportShttpPlay: !1,
							bSupportShttpPlayback: !1,
							bSupportShttpsPlay: !1,
							bSupportShttpsPlayback: !1,
							bSupportShttpPlaybackTransCode: !1,
							bSupportShttpsPlaybackTransCode: !1,
							iIpChanBase: 1
						}
					},
					Q = function() {
						this.iIndex = 0, this.szIP = "", this.iChannelID = "", this.iPlayStatus = g, this.bSound = !1, this.bRecord = !1, this.bPTZAuto = !1, this.bEZoom = !1, this.b3DZoom = !1
					},
					et = function() {
						this.options = {
							type: "GET",
							url: "",
							auth: "",
							timeout: 1e4,
							data: "",
							async: !0,
							success: null,
							error: null
						}, this.m_szHttpHead = "", this.m_szHttpContent = "", this.m_szHttpData = ""
					};
				et.prototype.m_httpRequestSet = [], et.prototype.setRequestParam = function(e) {
					I.extend(this.options, e)
				}, et.prototype.submitRequest = function() {
					var e = this.getHttpMethod(this.options.type),
						t = null;
					if(this.options.async) {
						var s = c.HWP_SubmitHttpRequest(e, this.options.url, this.options.auth, this.options.data, this.options.timeout); - 1 != s && (t = {
							iRequestID: s,
							funSuccessCallback: this.options.success,
							funErrorCallback: this.options.error
						}, this.m_httpRequestSet.push(t))
					} else {
						var n = c.HWP_SendHttpSynRequest(e, this.options.url, this.options.auth, this.options.data, this.options.timeout);
						t = {
							funSuccessCallback: this.options.success,
							funErrorCallback: this.options.error
						}, this.httpDataAnalyse(t, n)
					}
				}, et.prototype.getHttpMethod = function(e) {
					var t = {
							GET: 1,
							POST: 2,
							PUT: 5,
							DELETE: 6
						},
						s = t[e];
					return s ? s : -1
				}, et.prototype.processCallback = function(e, t) {
					for(var s = null, n = 0; n < this.m_httpRequestSet.length; n++)
						if(e == this.m_httpRequestSet[n].iRequestID) {
							s = this.m_httpRequestSet[n], this.m_httpRequestSet.splice(n, 1);
							break
						}
					null != s && (this.httpDataAnalyse(s, t), delete s)
				}, et.prototype.httpDataAnalyse = function(e, t) {
					var s = "",
						n = 0;
					"" == t || W(t) ? e.funErrorCallback() : (n = parseInt(t.substring(0, 3)), s = t.substring(3, t.length), isNaN(n) ? e.funErrorCallback() : y == n ? e.funSuccessCallback(I.loadXML(s)) : e.funErrorCallback(n, I.loadXML(s)))
				};
				var tt = function() {};
				tt.prototype.CGI = {
					login: "%s%s:%s/ISAPI/Security/userCheck",
					getAudioInfo: "%s%s:%s/ISAPI/System/TwoWayAudio/channels",
					getDeviceInfo: "%s%s:%s/ISAPI/System/deviceInfo",
					getAnalogChannelInfo: "%s%s:%s/ISAPI/System/Video/inputs/channels",
					getDigitalChannelInfo: "%s%s:%s/ISAPI/ContentMgmt/InputProxy/channels/status",
					getZeroChannelInfo: "%s%s:%s/ISAPI/ContentMgmt/ZeroVideo/channels",
					getStreamChannels: {
						analog: "%s%s:%s/ISAPI/Streaming/channels",
						digital: "%s%s:%s/ISAPI/ContentMgmt/StreamingProxy/channels"
					},
					getStreamDynChannels: "%s%s:%s/PSIA/Custom/SelfExt/ContentMgmt/DynStreaming/channels",
					startRealPlay: {
						channels: "%s%s:%s/PSIA/streaming/channels/%s",
						zeroChannels: "%s%s:%s/PSIA/Custom/SelfExt/ContentMgmt/ZeroStreaming/channels/%s"
					},
					startShttpRealPlay: {
						channels: "%s%s:%s/SDK/play/%s/004",
						zeroChannels: "%s%s:%s/SDK/play/100/004/ZeroStreaming"
					},
					startVoiceTalk: {
						open: "%s%s:%s/ISAPI/System/TwoWayAudio/channels/%s/open",
						close: "%s%s:%s/ISAPI/System/TwoWayAudio/channels/%s/close",
						audioData: "%s%s:%s/ISAPI/System/TwoWayAudio/channels/%s/audioData"
					},
					ptzControl: {
						analog: "%s%s:%s/ISAPI/PTZCtrl/channels/%s/continuous",
						digital: "%s%s:%s/ISAPI/ContentMgmt/PTZCtrlProxy/channels/%s/continuous"
					},
					ptzAutoControl: {
						ipdome: "%s%s:%s/ISAPI/PTZCtrl/channels/%s/presets/%s/goto",
						analog: "%s%s:%s/ISAPI/PTZCtrl/channels/%s/autoPan",
						digital: "%s%s:%s/ISAPI/ContentMgmt/PTZCtrlProxy/channels/%s/autoPan"
					},
					setPreset: {
						analog: "%s%s:%s/ISAPI/PTZCtrl/channels/%s/presets/%s",
						digital: "%s%s:%s/ISAPI/ContentMgmt/PTZCtrlProxy/channels/%s/presets/%s"
					},
					goPreset: {
						analog: "%s%s:%s/ISAPI/PTZCtrl/channels/%s/presets/%s/goto",
						digital: "%s%s:%s/ISAPI/ContentMgmt/PTZCtrlProxy/channels/%s/presets/%s/goto"
					},
					ptzFocus: {
						analog: "%s%s:%s/ISAPI/Image/channels/%s/focus",
						digital: "%s%s:%s/ISAPI/ContentMgmt/ImageProxy/channels/%s/focus",
						ipc: "%s%s:%s/ISAPI/System/Video/inputs/channels/%s/focus"
					},
					ptzIris: {
						analog: "%s%s:%s/ISAPI/Image/channels/%s/iris",
						digital: "%s%s:%s/ISAPI/ContentMgmt/ImageProxy/channels/%s/iris",
						ipc: "%s%s:%s/ISAPI/System/Video/inputs/channels/%s/iris"
					},
					getNetworkBond: "%s%s:%s/ISAPI/System/Network/Bond",
					getNetworkInterface: "%s%s:%s/ISAPI/System/Network/interfaces",
					getUPnPPortStatus: "%s%s:%s/ISAPI/System/Network/UPnP/ports/status",
					getPPPoEStatus: "%s%s:%s/ISAPI/System/Network/PPPoE/1/status",
					getPortInfo: "%s%s:%s/ISAPI/Security/adminAccesses",
					recordSearch: "%s%s:%s/ISAPI/ContentMgmt/search",
					startPlayback: "%s%s:%s/PSIA/streaming/tracks/%s?starttime=%s&endtime=%s",
					startShttpPlayback: "%s%s:%s/SDK/playback/%s",
					startShttpReversePlayback: "%s%s:%s/SDK/playback/%s/reversePlay",
					startTransCodePlayback: "%s%s:%s/SDK/playback/%s/transcoding",
					startDownloadRecord: "%s%s:%s/ISAPI/ContentMgmt/download",
					deviceConfig: "%s%s:%s/ISAPI/System/configurationData",
					restart: "%s%s:%s/ISAPI/System/reboot",
					restore: "%s%s:%s/ISAPI/System/factoryReset?mode=%s",
					startUpgrade: {
						upgrade: "%s%s:%s/ISAPI/System/updateFirmware",
						status: "%s%s:%s/ISAPI/System/upgradeStatus"
					},
					set3DZoom: "%s%s:%s/ISAPI/PTZCtrl/channels/%s/position3D",
					SDKCapabilities: "%s%s:%s/SDK/capabilities"
				}, tt.prototype.login = function(e, t, n, r) {
					var o = 2 == r.protocol ? "https://" : "http://",
						i = k(this.CGI.login, o, e, t),
						a = new et,
						c = {
							type: "GET",
							url: i,
							auth: n,
							success: null,
							error: null
						};
					I.extend(c, r), I.extend(c, {
						success: function(e) {
							"200" == s.$XML(e).find("statusValue").eq(0).text() || "OK" == s.$XML(e).find("statusString").eq(0).text() ? r.success && r.success(e) : r.error && r.error(401, e)
						},
						error: function(e, t) {
							r.error && r.error(e, t)
						}
					}), a.setRequestParam(c), a.submitRequest()
				}, tt.prototype.getAudioInfo = function(e, t) {
					var s = k(this.CGI.getAudioInfo, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, tt.prototype.getDeviceInfo = function(e, t) {
					var n = k(this.CGI.getDeviceInfo, e.szHttpProtocol, e.szIP, e.iCGIPort),
						r = new et,
						o = {
							type: "GET",
							url: n,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(o, t), I.extend(o, {
						success: function(e) {
							var n = [];
							n.push("<DeviceInfo>"), n.push("<deviceName>" + I.escape(s.$XML(e).find("deviceName").eq(0).text()) + "</deviceName>"), n.push("<deviceID>" + s.$XML(e).find("deviceID").eq(0).text() + "</deviceID>"), n.push("<deviceType>" + s.$XML(e).find("deviceType").eq(0).text() + "</deviceType>"), n.push("<model>" + s.$XML(e).find("model").eq(0).text() + "</model>"), n.push("<serialNumber>" + s.$XML(e).find("serialNumber").eq(0).text() + "</serialNumber>"), n.push("<macAddress>" + s.$XML(e).find("macAddress").eq(0).text() + "</macAddress>"), n.push("<firmwareVersion>" + s.$XML(e).find("firmwareVersion").eq(0).text() + "</firmwareVersion>"), n.push("<firmwareReleasedDate>" + s.$XML(e).find("firmwareReleasedDate").eq(0).text() + "</firmwareReleasedDate>"), n.push("<encoderVersion>" + s.$XML(e).find("encoderVersion").eq(0).text() + "</encoderVersion>"), n.push("<encoderReleasedDate>" + s.$XML(e).find("encoderReleasedDate").eq(0).text() + "</encoderReleasedDate>"), n.push("</DeviceInfo>"), e = I.loadXML(n.join("")), t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), r.setRequestParam(o), r.submitRequest()
				}, tt.prototype.getAnalogChannelInfo = function(e, t) {
					var n = k(this.CGI.getAnalogChannelInfo, e.szHttpProtocol, e.szIP, e.iCGIPort),
						r = new et,
						o = {
							type: "GET",
							url: n,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(o, t), I.extend(o, {
						success: function(e) {
							var n = [];
							n.push("<VideoInputChannelList>");
							for(var r = s.$XML(e).find("VideoInputChannel", !0), o = 0, i = r.length; i > o; o++) {
								var a = r[o];
								n.push("<VideoInputChannel>"), n.push("<id>" + s.$XML(a).find("id").eq(0).text() + "</id>"), n.push("<inputPort>" + s.$XML(a).find("inputPort").eq(0).text() + "</inputPort>"), n.push("<name>" + I.escape(s.$XML(a).find("name").eq(0).text()) + "</name>"), n.push("<videoFormat>" + s.$XML(a).find("videoFormat").eq(0).text() + "</videoFormat>"), n.push("</VideoInputChannel>")
							}
							n.push("</VideoInputChannelList>"), e = I.loadXML(n.join("")), t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), r.setRequestParam(o), r.submitRequest()
				}, tt.prototype.getDigitalChannelInfo = function(e, t) {
					var n = k(this.CGI.getDigitalChannelInfo, e.szHttpProtocol, e.szIP, e.iCGIPort),
						r = new et,
						o = {
							type: "GET",
							url: n,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(o, t), I.extend(o, {
						success: function(e) {
							var n = [];
							n.push("<InputProxyChannelStatusList>");
							for(var r = s.$XML(e).find("InputProxyChannelStatus", !0), o = 0, i = r.length; i > o; o++) {
								var a = r[o];
								n.push("<InputProxyChannelStatus>"), n.push("<id>" + s.$XML(a).find("id").eq(0).text() + "</id>"), n.push("<sourceInputPortDescriptor>"), n.push("<proxyProtocol>" + s.$XML(a).find("proxyProtocol").eq(0).text() + "</proxyProtocol>"), n.push("<addressingFormatType>" + s.$XML(a).find("addressingFormatType").eq(0).text() + "</addressingFormatType>"), n.push("<ipAddress>" + s.$XML(a).find("ipAddress").eq(0).text() + "</ipAddress>"), n.push("<managePortNo>" + s.$XML(a).find("managePortNo").eq(0).text() + "</managePortNo>"), n.push("<srcInputPort>" + s.$XML(a).find("srcInputPort").eq(0).text() + "</srcInputPort>"), n.push("<userName>" + I.escape(s.$XML(a).find("userName").eq(0).text()) + "</userName>"), n.push("<streamType>" + s.$XML(a).find("streamType").eq(0).text() + "</streamType>"), n.push("<online>" + s.$XML(a).find("online").eq(0).text() + "</online>"), n.push("</sourceInputPortDescriptor>"), n.push("</InputProxyChannelStatus>")
							}
							n.push("</InputProxyChannelStatusList>"), e = I.loadXML(n.join("")), t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), r.setRequestParam(o), r.submitRequest()
				}, tt.prototype.getZeroChannelInfo = function(e, t) {
					var s = k(this.CGI.getZeroChannelInfo, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, tt.prototype.getStreamChannels = function(e, t) {
					if(0 != e.iAnalogChannelNum) var s = k(this.CGI.getStreamChannels.analog, e.szHttpProtocol, e.szIP, e.iCGIPort);
					else var s = k(this.CGI.getStreamChannels.digital, e.szHttpProtocol, e.szIP, e.iCGIPort);
					var n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, tt.prototype.getPPPoEStatus = function(e, t) {
					var s = k(this.CGI.getPPPoEStatus, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, tt.prototype.getUPnPPortStatus = function(e, t) {
					var s = k(this.CGI.getUPnPPortStatus, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, tt.prototype.getNetworkBond = function(e, t) {
					var s = k(this.CGI.getNetworkBond, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, tt.prototype.getNetworkInterface = function(e, t) {
					var s = k(this.CGI.getNetworkInterface, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, tt.prototype.getPortInfo = function(e, t) {
					var s = k(this.CGI.getPortInfo, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, tt.prototype.startRealPlay = function(e, t) {
					var s = 100 * t.iChannelID + t.iStreamType,
						n = "";
					n = t.bZeroChannel ? k(t.cgi.zeroChannels, t.urlProtocol, e.szIP, t.iPort, s) : k(t.cgi.channels, t.urlProtocol, e.szIP, t.iPort, s);
					var r = c.HWP_Play(n, e.szAuth, t.iWndIndex, "", "");
					if(0 == r) {
						var o = new Q;
						o.iIndex = t.iWndIndex, o.szIP = e.szIP, o.iChannelID = t.iChannelID, o.iPlayStatus = v, p.push(o)
					}
					return r
				}, tt.prototype.startVoiceTalk = function(e, t) {
					var s = k(this.CGI.startVoiceTalk.open, e.szHttpProtocol, e.szIP, e.iCGIPort, t),
						n = k(this.CGI.startVoiceTalk.close, e.szHttpProtocol, e.szIP, e.iCGIPort, t),
						r = k(this.CGI.startVoiceTalk.audioData, e.szHttpProtocol, e.szIP, e.iCGIPort, t),
						o = c.HWP_StartVoiceTalk(s, n, r, e.szAuth, e.iAudioType);
					return o
				}, tt.prototype.ptzAutoControl = function(e, t, s, n) {
					var r = s.iChannelID,
						o = "",
						i = "";
					if(n.iPTZSpeed = n.iPTZSpeed < 7 ? 15 * n.iPTZSpeed : 100, t && (n.iPTZSpeed = 0), e.szDeviceType != X) o = r <= e.iAnalogChannelNum ? k(this.CGI.ptzAutoControl.analog, e.szHttpProtocol, e.szIP, e.iCGIPort, s.iChannelID) : s.bShttpIPChannel ? k(this.CGI.ptzAutoControl.digital, e.szHttpProtocol, e.szIP, e.iCGIPort, s.iChannelID - e.oStreamCapa.iIpChanBase + 1 + e.iAnalogChannelNum) : k(this.CGI.ptzAutoControl.digital, e.szHttpProtocol, e.szIP, e.iCGIPort, s.iChannelID), i = "<?xml version='1.0' encoding='UTF-8'?><autoPanData><autoPan>" + n.iPTZSpeed + "</autoPan></autoPanData>";
					else {
						var a = 99;
						t && (a = 96), o = k(this.CGI.ptzAutoControl.ipdome, e.szHttpProtocol, e.szIP, e.iCGIPort, s.iChannelID, a)
					}
					var c = new et,
						u = {
							type: "PUT",
							url: o,
							async: !1,
							auth: e.szAuth,
							data: i,
							success: null,
							error: null
						},
						l = this;
					I.extend(u, n), I.extend(u, {
						success: function(e) {
							s.bPTZAuto = !s.bPTZAuto, n.success && n.success(e)
						},
						error: function(t, r) {
							if(G == e.szDeviceType || H == e.szDeviceType) {
								o = s.bShttpIPChannel ? k(l.CGI.ptzControl.analog, e.szHttpProtocol, e.szIP, e.iCGIPort, s.iChannelID - e.oStreamCapa.iIpChanBase + 1 + e.iAnalogChannelNum) : k(l.CGI.ptzControl.analog, e.szHttpProtocol, e.szIP, e.iCGIPort, s.iChannelID), i = "<?xml version='1.0' encoding='UTF-8'?><PTZData><pan>" + n.iPTZSpeed + "</pan><tilt>0</tilt></PTZData>";
								var a = new et,
									c = {
										type: "PUT",
										url: o,
										async: !1,
										auth: e.szAuth,
										data: i,
										success: null,
										error: null
									};
								I.extend(c, n), a.setRequestParam(c), a.submitRequest()
							} else n.error && n.error(t, r)
						}
					}), c.setRequestParam(u), c.submitRequest()
				}, tt.prototype.ptzControl = function(e, t, s, n) {
					var r = s.iChannelID,
						o = "";
					s.bPTZAuto && this.ptzAutoControl(e, !0, s, {
						iPTZSpeed: 0
					}), n.iPTZSpeed = t ? 0 : n.iPTZSpeed < 7 ? 15 * n.iPTZSpeed : 100;
					var i = [{}, {
							pan: 0,
							tilt: n.iPTZSpeed
						}, {
							pan: 0,
							tilt: -n.iPTZSpeed
						}, {
							pan: -n.iPTZSpeed,
							tilt: 0
						}, {
							pan: n.iPTZSpeed,
							tilt: 0
						}, {
							pan: -n.iPTZSpeed,
							tilt: n.iPTZSpeed
						}, {
							pan: -n.iPTZSpeed,
							tilt: -n.iPTZSpeed
						}, {
							pan: n.iPTZSpeed,
							tilt: n.iPTZSpeed
						}, {
							pan: n.iPTZSpeed,
							tilt: -n.iPTZSpeed
						}, {}, {
							speed: n.iPTZSpeed
						}, {
							speed: -n.iPTZSpeed
						}, {
							speed: n.iPTZSpeed
						}, {
							speed: -n.iPTZSpeed
						}, {
							speed: n.iPTZSpeed
						}, {
							speed: -n.iPTZSpeed
						}],
						a = "",
						c = {};
					switch(n.iPTZIndex) {
						case 1:
						case 2:
						case 3:
						case 4:
						case 5:
						case 6:
						case 7:
						case 8:
							c = this.CGI.ptzControl, a = "<?xml version='1.0' encoding='UTF-8'?><PTZData><pan>" + i[n.iPTZIndex].pan + "</pan><tilt>" + i[n.iPTZIndex].tilt + "</tilt></PTZData>";
							break;
						case 10:
						case 11:
							c = this.CGI.ptzControl, a = "<?xml version='1.0' encoding='UTF-8'?><PTZData><zoom>" + i[n.iPTZIndex].speed + "</zoom></PTZData>";
							break;
						case 12:
						case 13:
							c = this.CGI.ptzFocus, a = "<?xml version='1.0' encoding='UTF-8'?><FocusData><focus>" + i[n.iPTZIndex].speed + "</focus></FocusData>";
							break;
						case 14:
						case 15:
							c = this.CGI.ptzIris, a = "<?xml version='1.0' encoding='UTF-8'?><IrisData><iris>" + i[n.iPTZIndex].speed + "</iris></IrisData>";
							break;
						default:
							return void(W(n.error) && n.error())
					}
					o = c != this.CGI.ptzFocus && c != this.CGI.ptzIris || e.szDeviceType != G && e.szDeviceType != X && e.szDeviceType != H ? r <= e.iAnalogChannelNum ? k(c.analog, e.szHttpProtocol, e.szIP, e.iCGIPort, s.iChannelID) : s.bShttpIPChannel ? k(c.digital, e.szHttpProtocol, e.szIP, e.iCGIPort, s.iChannelID - e.oStreamCapa.iIpChanBase + 1 + e.iAnalogChannelNum) : k(c.digital, e.szHttpProtocol, e.szIP, e.iCGIPort, s.iChannelID) : k(c.ipc, e.szHttpProtocol, e.szIP, e.iCGIPort, s.iChannelID);
					var u = new et,
						l = {
							type: "PUT",
							url: o,
							async: !1,
							auth: e.szAuth,
							data: a,
							success: null,
							error: null
						};
					I.extend(l, n), I.extend(l, {
						success: function(e) {
							n.success && n.success(e)
						},
						error: function(e, t) {
							n.error && n.error(e, t)
						}
					}), u.setRequestParam(l), u.submitRequest()
				}, tt.prototype.setPreset = function(e, t, s) {
					var n = t.iChannelID,
						r = "",
						o = "";
					r = n <= e.iAnalogChannelNum ? k(this.CGI.setPreset.analog, e.szHttpProtocol, e.szIP, e.iCGIPort, t.iChannelID, s.iPresetID) : t.bShttpIPChannel ? k(this.CGI.setPreset.digital, e.szHttpProtocol, e.szIP, e.iCGIPort, t.iChannelID - e.oStreamCapa.iIpChanBase + 1 + e.iAnalogChannelNum, s.iPresetID) : k(this.CGI.setPreset.digital, e.szHttpProtocol, e.szIP, e.iCGIPort, t.iChannelID, s.iPresetID), o = "<?xml version='1.0' encoding='UTF-8'?>", o += "<PTZPreset>", o += "<id>" + s.iPresetID + "</id>", e.szDeviceType != X && (o += "<presetName>Preset" + s.iPresetID + "</presetName>"), o += "</PTZPreset>";
					var i = new et,
						a = {
							type: "PUT",
							url: r,
							auth: e.szAuth,
							data: o,
							success: null,
							error: null
						};
					I.extend(a, s), I.extend(a, {
						success: function(e) {
							s.success && s.success(e)
						},
						error: function(e, t) {
							s.error && s.error(e, t)
						}
					}), i.setRequestParam(a), i.submitRequest()
				}, tt.prototype.goPreset = function(e, t, s) {
					var n = t.iChannelID,
						r = "";
					r = n <= e.iAnalogChannelNum ? k(this.CGI.goPreset.analog, e.szHttpProtocol, e.szIP, e.iCGIPort, t.iChannelID, s.iPresetID) : t.bShttpIPChannel ? k(this.CGI.goPreset.digital, e.szHttpProtocol, e.szIP, e.iCGIPort, t.iChannelID - e.oStreamCapa.iIpChanBase + 1 + e.iAnalogChannelNum, s.iPresetID) : k(this.CGI.goPreset.digital, e.szHttpProtocol, e.szIP, e.iCGIPort, t.iChannelID, s.iPresetID);
					var o = new et,
						i = {
							type: "PUT",
							url: r,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(i, s), I.extend(i, {
						success: function(e) {
							s.success && s.success(e)
						},
						error: function(e, t) {
							s.error && s.error(e, t)
						}
					}), o.setRequestParam(i), o.submitRequest()
				}, tt.prototype.recordSearch = function(e, n) {
					var r = "",
						o = "",
						i = n.iChannelID,
						a = n.szStartTime.replace(" ", "T") + "Z",
						c = n.szEndTime.replace(" ", "T") + "Z";
					r = k(this.CGI.recordSearch, e.szHttpProtocol, e.szIP, e.iCGIPort), o = "<?xml version='1.0' encoding='UTF-8'?><CMSearchDescription><searchID>" + new t + "</searchID><trackList><trackID>" + (100 * i + 1) + "</trackID></trackList><timeSpanList><timeSpan><startTime>" + a + "</startTime><endTime>" + c + "</endTime></timeSpan></timeSpanList><maxResults>40</maxResults><searchResultPostion>" + n.iSearchPos + "</searchResultPostion><metadataList><metadataDescriptor>//metadata.ISAPI.org/VideoMotion</metadataDescriptor></metadataList></CMSearchDescription>";
					var u = new et,
						l = {
							type: "POST",
							url: r,
							auth: e.szAuth,
							data: o,
							success: null,
							error: null
						};
					I.extend(l, n), I.extend(l, {
						success: function(e) {
							var t = [];
							t.push("<CMSearchResult>"), t.push("<responseStatus>" + s.$XML(e).find("responseStatus").eq(0).text() + "</responseStatus>"), t.push("<responseStatusStrg>" + s.$XML(e).find("responseStatusStrg").eq(0).text() + "</responseStatusStrg>"), t.push("<numOfMatches>" + s.$XML(e).find("numOfMatches").eq(0).text() + "</numOfMatches>"), t.push("<matchList>");
							for(var r = s.$XML(e).find("searchMatchItem", !0), o = 0, i = r.length; i > o; o++) {
								var a = r[o];
								t.push("<searchMatchItem>"), t.push("<trackID>" + s.$XML(a).find("trackID").eq(0).text() + "</trackID>"), t.push("<startTime>" + s.$XML(a).find("startTime").eq(0).text() + "</startTime>"), t.push("<endTime>" + s.$XML(a).find("endTime").eq(0).text() + "</endTime>"), t.push("<playbackURI>" + I.escape(s.$XML(a).find("playbackURI").eq(0).text()) + "</playbackURI>"), t.push("<metadataDescriptor>" + s.$XML(a).find("metadataDescriptor").eq(0).text().split("/")[1] + "</metadataDescriptor>"), t.push("</searchMatchItem>")
							}
							t.push("</matchList>"), t.push("</CMSearchResult>"), e = I.loadXML(t.join("")), n.success && n.success(e)
						},
						error: function(e, t) {
							n.error && n.error(e, t)
						}
					}), u.setRequestParam(l), u.submitRequest()
				}, tt.prototype.startPlayback = function(e, t) {
					var s = t.iWndIndex,
						n = t.szStartTime,
						r = t.szEndTime,
						o = k(t.cgi, t.urlProtocol, e.szIP, t.iPort, t.iChannelID, n, r);
					if(!W(t.oTransCodeParam)) {
						var i = K(t.oTransCodeParam);
						if("" == i) return -1;
						c.HWP_SetTrsPlayBackParam(s, i)
					}
					var a = c.HWP_Play(o, e.szAuth, s, n, r);
					if(0 == a) {
						var u = new Q;
						u.iIndex = s, u.szIP = e.szIP, u.iChannelID = t.iChannelID, u.iPlayStatus = x, p.push(u)
					}
					return a
				}, tt.prototype.reversePlayback = function(e, t) {
					var s = t.iWndIndex,
						n = t.szStartTime,
						r = t.szEndTime,
						o = k(t.cgi, t.urlProtocol, e.szIP, t.iPort, t.iChannelID, n, r),
						i = c.HWP_ReversePlay(o, e.szAuth, s, n, r);
					if(0 == i) {
						var a = new Q;
						a.iIndex = s, a.szIP = e.szIP, a.iChannelID = t.iChannelID, a.iPlayStatus = D, p.push(a)
					}
					return i
				}, tt.prototype.startDownloadRecord = function(e, t) {
					var s = k(this.CGI.startDownloadRecord, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = "<?xml version='1.0' encoding='UTF-8'?><downloadRequest><playbackURI> " + I.escape(t.szPlaybackURI) + "</playbackURI></downloadRequest>";
					return c.HWP_StartDownload(s, e.szAuth, t.szFileName, n)
				}, tt.prototype.exportDeviceConfig = function(e) {
					var t = k(this.CGI.deviceConfig, e.szHttpProtocol, e.szIP, e.iCGIPort);
					return c.HWP_ExportDeviceConfig(t, e.szAuth, "", 0)
				}, tt.prototype.importDeviceConfig = function(e, t) {
					var s = k(this.CGI.deviceConfig, e.szHttpProtocol, e.szIP, e.iCGIPort);
					return c.HWP_ImportDeviceConfig(s, e.szAuth, t.szFileName, 0)
				}, tt.prototype.restart = function(e, t) {
					var s = k(this.CGI.restart, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "PUT",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, tt.prototype.restore = function(e, t, s) {
					var n = k(this.CGI.restore, e.szHttpProtocol, e.szIP, e.iCGIPort, t),
						r = new et,
						o = {
							type: "PUT",
							url: n,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(o, s), I.extend(o, {
						success: function(e) {
							s.success && s.success(e)
						},
						error: function(e, t) {
							s.error && s.error(e, t)
						}
					}), r.setRequestParam(o), r.submitRequest()
				}, tt.prototype.startUpgrade = function(e, t) {
					var s = k(this.CGI.startUpgrade.upgrade, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = k(this.CGI.startUpgrade.status, e.szHttpProtocol, e.szIP, e.iCGIPort);
					return c.HWP_StartUpgrade(s, n, e.szAuth, t.szFileName)
				}, tt.prototype.set3DZoom = function(e, t, n, r) {
					var o = t.iChannelID,
						i = "";
					i = o <= e.iAnalogChannelNum ? k(this.CGI.set3DZoom, e.szHttpProtocol, e.szIP, e.iCGIPort, t.iChannelID) : t.bShttpIPChannel ? k(this.CGI.set3DZoom, e.szHttpProtocol, e.szIP, e.iCGIPort, t.iChannelID - e.oStreamCapa.iIpChanBase + 1 + e.iAnalogChannelNum) : k(this.CGI.set3DZoom, e.szHttpProtocol, e.szIP, e.iCGIPort, t.iChannelID);
					var a = I.loadXML(n),
						c = parseInt(s.$XML(a).find("StartPoint").eq(0).find("positionX").eq(0).text(), 10),
						u = parseInt(s.$XML(a).find("StartPoint").eq(0).find("positionY").eq(0).text(), 10),
						l = parseInt(s.$XML(a).find("EndPoint").eq(0).find("positionX").eq(0).text(), 10),
						p = parseInt(s.$XML(a).find("EndPoint").eq(0).find("positionY").eq(0).text(), 10),
						d = "<?xml version='1.0' encoding='UTF-8'?><position3D><StartPoint><positionX>" + c + "</positionX><positionY>" + (255 - u) + "</positionY></StartPoint><EndPoint><positionX>" + l + "</positionX><positionY>" + (255 - p) + "</positionY></EndPoint></position3D>",
						P = new et,
						h = {
							type: "PUT",
							url: i,
							data: d,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(h, r), I.extend(h, {
						success: function(e) {
							r.success && r.success(e)
						},
						error: function(e, t) {
							r.error && r.error(e, t)
						}
					}), P.setRequestParam(h), P.submitRequest()
				}, tt.prototype.getSDKCapa = function(e, t) {
					var s = k(this.CGI.SDKCapabilities, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				};
				var st = function() {};
				st.prototype.CGI = {
					login: "%s%s:%s/PSIA/Custom/SelfExt/userCheck",
					getAudioInfo: "%s%s:%s/PSIA/Custom/SelfExt/TwoWayAudio/channels",
					getDeviceInfo: "%s%s:%s/PSIA/System/deviceInfo",
					getAnalogChannelInfo: "%s%s:%s/PSIA/System/Video/inputs/channels",
					getDigitalChannelInfo: "%s%s:%s/PSIA/Custom/SelfExt/ContentMgmt/DynVideo/inputs/channels/status",
					getZeroChannelInfo: "%s%s:%s/PSIA/Custom/SelfExt/ContentMgmt/ZeroVideo/channels",
					getStreamChannels: {
						analog: "%s%s:%s/PSIA/Streaming/channels",
						digital: "%s%s:%s/PSIA/Custom/SelfExt/ContentMgmt/DynStreaming/channels"
					},
					getStreamDynChannels: "%s%s:%s/PSIA/Custom/SelfExt/ContentMgmt/DynStreaming/channels",
					startRealPlay: {
						channels: "%s%s:%s/PSIA/streaming/channels/%s",
						zeroChannels: "%s%s:%s/PSIA/Custom/SelfExt/ContentMgmt/ZeroStreaming/channels/%s"
					},
					startVoiceTalk: {
						open: "%s%s:%s/PSIA/Custom/SelfExt/TwoWayAudio/channels/%s/open",
						close: "%s%s:%s/PSIA/Custom/SelfExt/TwoWayAudio/channels/%s/close",
						audioData: "%s%s:%s/PSIA/Custom/SelfExt/TwoWayAudio/channels/%s/audioData"
					},
					ptzControl: "%s%s:%s/PSIA/PTZ/channels/%s/continuous",
					ptzAutoControl: "%s%s:%s/PSIA/Custom/SelfExt/PTZ/channels/%s/autoptz",
					setPreset: "%s%s:%s/PSIA/PTZ/channels/%s/presets/%s",
					goPreset: "%s%s:%s/PSIA/PTZ/channels/%s/presets/%s/goto",
					ptzFocus: "%s%s:%s/PSIA/System/Video/inputs/channels/%s/focus",
					ptzIris: "%s%s:%s/PSIA/System/Video/inputs/channels/%s/iris",
					getNetworkBond: "%s%s:%s/PSIA/Custom/SelfExt/Bond",
					getNetworkInterface: "%s%s:%s/PSIA/System/Network/interfaces",
					getUPnPPortStatus: "%s%s:%s/PSIA/Custom/SelfExt/UPnP/ports/status",
					getPPPoEStatus: "%s%s:%s/PSIA/Custom/SelfExt/PPPoE/1/status",
					getPortInfo: "%s%s:%s/PSIA/Security/AAA/adminAccesses",
					recordSearch: "%s%s:%s/PSIA/ContentMgmt/search",
					startPlayback: "%s%s:%s/PSIA/streaming/tracks/%s?starttime=%s&endtime=%s",
					startDownloadRecord: "%s%s:%s/PSIA/Custom/SelfExt/ContentMgmt/download",
					deviceConfig: "%s%s:%s/PSIA/System/configurationData",
					restart: "%s%s:%s/PSIA/System/reboot",
					restore: "%s%s:%s/PSIA/System/factoryReset?mode=%s",
					startUpgrade: {
						upgrade: "%s%s:%s/PSIA/System/updateFirmware",
						status: "%s%s:%s/PSIA/Custom/SelfExt/upgradeStatus"
					},
					set3DZoom: "%s%s:%s/PSIA/Custom/SelfExt/PTZ/channels/%s/Set3DZoom"
				}, st.prototype.login = function(e, t, n, r) {
					var o = 2 == r.protocol ? "https://" : "http://",
						i = k(this.CGI.login, o, e, t),
						a = new et,
						c = {
							type: "GET",
							url: i,
							auth: n,
							success: null,
							error: null
						};
					I.extend(c, r), I.extend(c, {
						success: function(e) {
							"200" == s.$XML(e).find("statusValue").eq(0).text() ? r.success && r.success(e) : r.error && r.error(401, e)
						},
						error: function(e, t) {
							r.error && r.error(e, t)
						}
					}), a.setRequestParam(c), a.submitRequest()
				}, st.prototype.getAudioInfo = function(e, t) {
					var s = k(this.CGI.getAudioInfo, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, st.prototype.getDeviceInfo = function(e, t) {
					var n = k(this.CGI.getDeviceInfo, e.szHttpProtocol, e.szIP, e.iCGIPort),
						r = new et,
						o = {
							type: "GET",
							url: n,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(o, t), I.extend(o, {
						success: function(e) {
							var n = [];
							n.push("<DeviceInfo>"), n.push("<deviceName>" + I.escape(s.$XML(e).find("deviceName").eq(0).text()) + "</deviceName>"), n.push("<deviceID>" + s.$XML(e).find("deviceID").eq(0).text() + "</deviceID>"), n.push("<deviceType>" + s.$XML(e).find("deviceDescription").eq(0).text() + "</deviceType>"), n.push("<model>" + s.$XML(e).find("model").eq(0).text() + "</model>"), n.push("<serialNumber>" + s.$XML(e).find("serialNumber").eq(0).text() + "</serialNumber>"), n.push("<macAddress>" + s.$XML(e).find("macAddress").eq(0).text() + "</macAddress>"), n.push("<firmwareVersion>" + s.$XML(e).find("firmwareVersion").eq(0).text() + "</firmwareVersion>"), n.push("<firmwareReleasedDate>" + s.$XML(e).find("firmwareReleasedDate").eq(0).text() + "</firmwareReleasedDate>"), n.push("<encoderVersion>" + s.$XML(e).find("logicVersion").eq(0).text() + "</encoderVersion>"), n.push("<encoderReleasedDate>" + s.$XML(e).find("logicReleasedDate").eq(0).text() + "</encoderReleasedDate>"), n.push("</DeviceInfo>"), e = I.loadXML(n.join("")), t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), r.setRequestParam(o), r.submitRequest()
				}, st.prototype.getAnalogChannelInfo = function(e, t) {
					var n = k(this.CGI.getAnalogChannelInfo, e.szHttpProtocol, e.szIP, e.iCGIPort),
						r = new et,
						o = {
							type: "GET",
							url: n,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(o, t), I.extend(o, {
						success: function(e) {
							var n = [];
							n.push("<VideoInputChannelList>");
							for(var r = s.$XML(e).find("VideoInputChannel", !0), o = 0, i = r.length; i > o; o++) {
								var a = r[o];
								n.push("<VideoInputChannel>"), n.push("<id>" + s.$XML(a).find("id").eq(0).text() + "</id>"), n.push("<inputPort>" + s.$XML(a).find("inputPort").eq(0).text() + "</inputPort>"), n.push("<name>" + I.escape(s.$XML(a).find("name").eq(0).text()) + "</name>"), n.push("<videoFormat>" + s.$XML(a).find("videoFormat").eq(0).text() + "</videoFormat>"), n.push("</VideoInputChannel>")
							}
							n.push("</VideoInputChannelList>"), e = I.loadXML(n.join("")), t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), r.setRequestParam(o), r.submitRequest()
				}, st.prototype.getDigitalChannelInfo = function(e, t) {
					var n = k(this.CGI.getDigitalChannelInfo, e.szHttpProtocol, e.szIP, e.iCGIPort),
						r = new et,
						o = {
							type: "GET",
							url: n,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(o, t), I.extend(o, {
						success: function(e) {
							var n = [];
							n.push("<InputProxyChannelStatusList>");
							for(var r = s.$XML(e).find("DynVideoInputChannelStatus", !0), o = 0, i = r.length; i > o; o++) {
								var a = r[o];
								n.push("<InputProxyChannelStatus>"), n.push("<id>" + s.$XML(a).find("id").eq(0).text() + "</id>"), n.push("<sourceInputPortDescriptor>"), n.push("<proxyProtocol>" + s.$XML(a).find("adminProtocol").eq(0).text() + "</proxyProtocol>"), n.push("<addressingFormatType>" + s.$XML(a).find("addressingFormatType").eq(0).text() + "</addressingFormatType>"), n.push("<ipAddress>" + s.$XML(a).find("ipAddress").eq(0).text() + "</ipAddress>"), n.push("<managePortNo>" + s.$XML(a).find("adminPortNo").eq(0).text() + "</managePortNo>"), n.push("<srcInputPort>" + s.$XML(a).find("srcInputPort").eq(0).text() + "</srcInputPort>"), n.push("<userName>" + I.escape(s.$XML(a).find("userName").eq(0).text()) + "</userName>"), n.push("<streamType>" + s.$XML(a).find("streamType").eq(0).text() + "</streamType>"), n.push("<online>" + s.$XML(a).find("online").eq(0).text() + "</online>"), n.push("</sourceInputPortDescriptor>"), n.push("</InputProxyChannelStatus>")
							}
							n.push("</InputProxyChannelStatusList>"), e = I.loadXML(n.join("")), t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), r.setRequestParam(o), r.submitRequest()
				}, st.prototype.getZeroChannelInfo = function(e, t) {
					var s = k(this.CGI.getZeroChannelInfo, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, st.prototype.getPPPoEStatus = function(e, t) {
					var s = k(this.CGI.getPPPoEStatus, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, st.prototype.getUPnPPortStatus = function(e, t) {
					var s = k(this.CGI.getUPnPPortStatus, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, st.prototype.getNetworkBond = function(e, t) {
					var s = k(this.CGI.getNetworkBond, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, st.prototype.getNetworkInterface = function(e, t) {
					var s = k(this.CGI.getNetworkInterface, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, st.prototype.getPortInfo = function(e, t) {
					var n = k(this.CGI.getPortInfo, e.szHttpProtocol, e.szIP, e.iCGIPort),
						r = new et,
						o = {
							type: "GET",
							url: n,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(o, t), I.extend(o, {
						success: function(n) {
							var r = [];
							r.push("<AdminAccessProtocolList>");
							for(var o = s.$XML(n).find("AdminAccessProtocol", !0), i = 0, a = o.length; a > i; i++) {
								{
									o[i]
								}
								r.push("<AdminAccessProtocol>"), r.push("<id>" + s.$XML(n).find("id").eq(0).text() + "</id>"), r.push("<enabled>" + s.$XML(n).find("enabled").eq(0).text() + "</enabled>"), r.push("<protocol>" + s.$XML(n).find("protocol").eq(0).text().toUpperCase() + "</protocol>"), r.push("<portNo>" + s.$XML(n).find("portNo").eq(0).text() + "</portNo>"), r.push("</AdminAccessProtocol>")
							}
							h.getStreamChannels(e, {
								async: !1,
								success: function(n) {
									if(s.$XML(n).find("rtspPortNo", !0).length > 0) {
										var o = parseInt(s.$XML(n).find("rtspPortNo").eq(0).text(), 10);
										r.push("<AdminAccessProtocol>"), r.push("<id>4</id>"), r.push("<enabled>true</enabled>"), r.push("<protocol>RTSP</protocol>"), r.push("<portNo>" + o + "</portNo>"), r.push("</AdminAccessProtocol>"), r.push("</AdminAccessProtocolList>");
										var i = I.loadXML(r.join(""));
										t.success && t.success(i)
									} else h.getStreamDynChannels(e, {
										async: !1,
										success: function(e) {
											if(s.$XML(e).find("rtspPortNo", !0).length > 0) {
												var n = parseInt(s.$XML(e).find("rtspPortNo").eq(0).text(), 10);
												r.push("<AdminAccessProtocol>"), r.push("<id>4</id>"), r.push("<enabled>true</enabled>"), r.push("<protocol>RTSP</protocol>"), r.push("<portNo>" + n + "</portNo>"), r.push("</AdminAccessProtocol>"), r.push("</AdminAccessProtocolList>");
												var o = I.loadXML(r.join(""));
												t.success && t.success(o)
											}
										},
										error: function() {
											t.error && t.error()
										}
									})
								},
								error: function() {
									t.error && t.error()
								}
							})
						},
						error: function() {
							var n = [];
							n.push("<AdminAccessProtocolList>"), h.getStreamChannels(e, {
								async: !1,
								success: function(r) {
									if(s.$XML(r).find("rtspPortNo", !0).length > 0) {
										var o = parseInt(s.$XML(r).find("rtspPortNo").eq(0).text(), 10);
										n.push("<AdminAccessProtocol>"), n.push("<id>4</id>"), n.push("<enabled>true</enabled>"), n.push("<protocol>RTSP</protocol>"), n.push("<portNo>" + o + "</portNo>"), n.push("</AdminAccessProtocol>"), n.push("</AdminAccessProtocolList>");
										var i = I.loadXML(n.join(""));
										t.success && t.success(i)
									} else h.getStreamDynChannels(e, {
										async: !1,
										success: function(e) {
											if(s.$XML(e).find("rtspPortNo", !0).length > 0) {
												var r = parseInt(s.$XML(e).find("rtspPortNo").eq(0).text(), 10);
												n.push("<AdminAccessProtocol>"), n.push("<id>4</id>"), n.push("<enabled>true</enabled>"), n.push("<protocol>RTSP</protocol>"), n.push("<portNo>" + r + "</portNo>"), n.push("</AdminAccessProtocol>"), n.push("</AdminAccessProtocolList>");
												var o = I.loadXML(n.join(""));
												t.success && t.success(o)
											}
										},
										error: function() {
											t.error && t.error()
										}
									})
								},
								error: function() {
									t.error && t.error()
								}
							})
						}
					}), r.setRequestParam(o), r.submitRequest()
				}, st.prototype.getStreamChannels = function(e, t) {
					if(0 != e.iAnalogChannelNum) var s = k(this.CGI.getStreamChannels.analog, e.szHttpProtocol, e.szIP, e.iCGIPort);
					else var s = k(this.CGI.getStreamChannels.digital, e.szHttpProtocol, e.szIP, e.iCGIPort);
					var n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, st.prototype.getStreamDynChannels = function(e, t) {
					var s = k(this.CGI.getStreamDynChannels, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "GET",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, st.prototype.startRealPlay = function(e, t) {
					var s = 100 * t.iChannelID + t.iStreamType,
						n = "";
					n = t.bZeroChannel ? k(t.cgi.zeroChannels, t.urlProtocol, e.szIP, t.iPort, s) : k(t.cgi.channels, t.urlProtocol, e.szIP, t.iPort, s);
					var r = c.HWP_Play(n, e.szAuth, t.iWndIndex, "", "");
					if(0 == r) {
						var o = new Q;
						o.iIndex = t.iWndIndex, o.szIP = e.szIP, o.iChannelID = t.iChannelID, o.iPlayStatus = v, p.push(o)
					}
					return r
				}, st.prototype.startVoiceTalk = function(e, t) {
					var s = k(this.CGI.startVoiceTalk.open, e.szHttpProtocol, e.szIP, e.iCGIPort, t),
						n = k(this.CGI.startVoiceTalk.close, e.szHttpProtocol, e.szIP, e.iCGIPort, t),
						r = k(this.CGI.startVoiceTalk.audioData, e.szHttpProtocol, e.szIP, e.iCGIPort, t),
						o = c.HWP_StartVoiceTalk(s, n, r, e.szAuth, e.iAudioType);
					return o
				}, st.prototype.ptzAutoControl = function(e, t, s, n) {
					var r = s.iChannelID,
						o = "",
						i = "";
					if(n.iPTZSpeed = n.iPTZSpeed < 7 ? 15 * n.iPTZSpeed : 100, t && (n.iPTZSpeed = 0), e.szDeviceType != X) o = k(this.CGI.ptzAutoControl, e.szHttpProtocol, e.szIP, e.iCGIPort, r), i = "<?xml version='1.0' encoding='UTF-8'?><PTZData><pan>" + n.iPTZSpeed + "</pan><tilt>0</tilt></PTZData>";
					else {
						var a = 99;
						t && (a = 96), o = k(this.CGI.goPreset, e.szHttpProtocol, e.szIP, e.iCGIPort, r, a)
					}
					var c = new et,
						u = {
							type: "PUT",
							url: o,
							async: !1,
							auth: e.szAuth,
							data: i,
							success: null,
							error: null
						},
						l = this;
					I.extend(u, n), I.extend(u, {
						success: function(e) {
							s.bPTZAuto = !s.bPTZAuto, n.success && n.success(e)
						},
						error: function(t, r) {
							if(e.szDeviceType != X) {
								o = k(l.CGI.ptzControl, e.szHttpProtocol, e.szIP, e.iCGIPort, s.iChannelID);
								var a = new et,
									c = {
										type: "PUT",
										url: o,
										async: !1,
										auth: e.szAuth,
										data: i,
										success: null,
										error: null
									};
								I.extend(c, n), a.setRequestParam(c), a.submitRequest()
							} else n.error && n.error(t, r)
						}
					}), c.setRequestParam(u), c.submitRequest()
				}, st.prototype.ptzControl = function(e, t, s, n) {
					var r = (s.iChannelID, "");
					s.bPTZAuto && this.ptzAutoControl(e, !0, s, {
						iPTZSpeed: 0
					}), n.iPTZSpeed = t ? 0 : n.iPTZSpeed < 7 ? 15 * n.iPTZSpeed : 100;
					var o = [{}, {
							pan: 0,
							tilt: n.iPTZSpeed
						}, {
							pan: 0,
							tilt: -n.iPTZSpeed
						}, {
							pan: -n.iPTZSpeed,
							tilt: 0
						}, {
							pan: n.iPTZSpeed,
							tilt: 0
						}, {
							pan: -n.iPTZSpeed,
							tilt: n.iPTZSpeed
						}, {
							pan: -n.iPTZSpeed,
							tilt: -n.iPTZSpeed
						}, {
							pan: n.iPTZSpeed,
							tilt: n.iPTZSpeed
						}, {
							pan: n.iPTZSpeed,
							tilt: -n.iPTZSpeed
						}, {}, {
							speed: n.iPTZSpeed
						}, {
							speed: -n.iPTZSpeed
						}, {
							speed: n.iPTZSpeed
						}, {
							speed: -n.iPTZSpeed
						}, {
							speed: n.iPTZSpeed
						}, {
							speed: -n.iPTZSpeed
						}],
						i = "",
						a = {};
					switch(n.iPTZIndex) {
						case 1:
						case 2:
						case 3:
						case 4:
						case 5:
						case 6:
						case 7:
						case 8:
							a = this.CGI.ptzControl, i = "<?xml version='1.0' encoding='UTF-8'?><PTZData><pan>" + o[n.iPTZIndex].pan + "</pan><tilt>" + o[n.iPTZIndex].tilt + "</tilt></PTZData>";
							break;
						case 10:
						case 11:
							a = this.CGI.ptzControl, i = "<?xml version='1.0' encoding='UTF-8'?><PTZData><zoom>" + o[n.iPTZIndex].speed + "</zoom></PTZData>";
							break;
						case 12:
						case 13:
							a = this.CGI.ptzFocus, i = "<?xml version='1.0' encoding='UTF-8'?><FocusData><focus>" + o[n.iPTZIndex].speed + "</focus></FocusData>";
							break;
						case 14:
						case 15:
							a = this.CGI.ptzIris, i = "<?xml version='1.0' encoding='UTF-8'?><IrisData><iris>" + o[n.iPTZIndex].speed + "</iris></IrisData>";
							break;
						default:
							return void(W(n.error) && n.error())
					}
					r = k(a, e.szHttpProtocol, e.szIP, e.iCGIPort, s.iChannelID);
					var c = new et,
						u = {
							type: "PUT",
							url: r,
							async: !1,
							auth: e.szAuth,
							data: i,
							success: null,
							error: null
						};
					I.extend(u, n), I.extend(u, {
						success: function(e) {
							n.success && n.success(e)
						},
						error: function(e, t) {
							n.error && n.error(e, t)
						}
					}), c.setRequestParam(u), c.submitRequest()
				}, st.prototype.setPreset = function(e, t, s) {
					var n = (t.iChannelID, ""),
						r = "";
					n = k(this.CGI.setPreset, e.szHttpProtocol, e.szIP, e.iCGIPort, t.iChannelID, s.iPresetID), r = "<?xml version='1.0' encoding='UTF-8'?>", r += "<PTZPreset>", r += "<id>" + s.iPresetID + "</id>", e.szDeviceType != X && (r += "<presetName>Preset" + s.iPresetID + "</presetName>"), r += "</PTZPreset>";
					var o = new et,
						i = {
							type: "PUT",
							url: n,
							auth: e.szAuth,
							data: r,
							success: null,
							error: null
						};
					I.extend(i, s), I.extend(i, {
						success: function(e) {
							s.success && s.success(e)
						},
						error: function(e, t) {
							s.error && s.error(e, t)
						}
					}), o.setRequestParam(i), o.submitRequest()
				}, st.prototype.goPreset = function(e, t, s) {
					var n = (t.iChannelID, "");
					n = k(this.CGI.goPreset, e.szHttpProtocol, e.szIP, e.iCGIPort, t.iChannelID, s.iPresetID);
					var r = new et,
						o = {
							type: "PUT",
							url: n,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(o, s), I.extend(o, {
						success: function(e) {
							s.success && s.success(e)
						},
						error: function(e, t) {
							s.error && s.error(e, t)
						}
					}), r.setRequestParam(o), r.submitRequest()
				}, st.prototype.recordSearch = function(e, n) {
					var r = "",
						o = "",
						i = n.iChannelID,
						a = n.szStartTime.replace(" ", "T") + "Z",
						c = n.szEndTime.replace(" ", "T") + "Z";
					r = k(this.CGI.recordSearch, e.szHttpProtocol, e.szIP, e.iCGIPort), o = "<?xml version='1.0' encoding='UTF-8'?><CMSearchDescription><searchID>" + new t + "</searchID><trackList><trackID>" + (100 * i + 1) + "</trackID></trackList><timeSpanList><timeSpan><startTime>" + a + "</startTime><endTime>" + c + "</endTime></timeSpan></timeSpanList><maxResults>40</maxResults><searchResultPostion>" + n.iSearchPos + "</searchResultPostion><metadataList><metadataDescriptor>//metadata.psia.org/VideoMotion</metadataDescriptor></metadataList></CMSearchDescription>";
					var u = new et,
						l = {
							type: "POST",
							url: r,
							auth: e.szAuth,
							data: o,
							success: null,
							error: null
						};
					I.extend(l, n), I.extend(l, {
						success: function(e) {
							var t = [];
							t.push("<CMSearchResult>"), t.push("<responseStatus>" + s.$XML(e).find("responseStatus").eq(0).text() + "</responseStatus>"), t.push("<responseStatusStrg>" + s.$XML(e).find("responseStatusStrg").eq(0).text() + "</responseStatusStrg>"), t.push("<numOfMatches>" + s.$XML(e).find("numOfMatches").eq(0).text() + "</numOfMatches>"), t.push("<matchList>");
							for(var r = s.$XML(e).find("searchMatchItem", !0), o = 0, i = r.length; i > o; o++) {
								var a = r[o];
								t.push("<searchMatchItem>"), t.push("<trackID>" + s.$XML(a).find("trackID").eq(0).text() + "</trackID>"), t.push("<startTime>" + s.$XML(a).find("startTime").eq(0).text() + "</startTime>"), t.push("<endTime>" + s.$XML(a).find("endTime").eq(0).text() + "</endTime>"), t.push("<playbackURI>" + I.escape(s.$XML(a).find("playbackURI").eq(0).text()) + "</playbackURI>"), t.push("<metadataDescriptor>" + s.$XML(a).find("metadataDescriptor").eq(0).text().split("/")[1] + "</metadataDescriptor>"), t.push("</searchMatchItem>")
							}
							t.push("</matchList>"), t.push("</CMSearchResult>"), e = I.loadXML(t.join("")), n.success && n.success(e)
						},
						error: function(e, t) {
							n.error && n.error(e, t)
						}
					}), u.setRequestParam(l), u.submitRequest()
				}, st.prototype.startPlayback = function(e, t) {
					var s = t.iWndIndex,
						n = t.szStartTime,
						r = t.szEndTime,
						o = k(t.cgi, t.urlProtocol, e.szIP, t.iPort, t.iChannelID, n, r),
						i = c.HWP_Play(o, e.szAuth, s, n, r);
					if(0 == i) {
						var a = new Q;
						a.iIndex = s, a.szIP = e.szIP, a.iChannelID = t.iChannelID, a.iPlayStatus = x, p.push(a)
					}
					return i
				}, st.prototype.reversePlayback = function(e, t) {
					var s = t.iWndIndex,
						n = t.szStartTime,
						r = t.szEndTime,
						o = k(t.cgi, t.urlProtocol, e.szIP, t.iPort, t.iChannelID, n, r),
						i = c.HWP_ReversePlay(o, e.szAuth, s, n, r);
					if(0 == i) {
						var a = new Q;
						a.iIndex = s, a.szIP = e.szIP, a.iChannelID = t.iChannelID, a.iPlayStatus = D, p.push(a)
					}
					return i
				}, st.prototype.startDownloadRecord = function(e, t) {
					var s = k(this.CGI.startDownloadRecord, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = "<?xml version='1.0' encoding='UTF-8'?><downloadRequest><playbackURI> " + I.escape(t.szPlaybackURI) + "</playbackURI></downloadRequest>";
					return c.HWP_StartDownload(s, e.szAuth, t.szFileName, n)
				}, st.prototype.exportDeviceConfig = function(e) {
					var t = k(this.CGI.deviceConfig, e.szHttpProtocol, e.szIP, e.iCGIPort);
					return c.HWP_ExportDeviceConfig(t, e.szAuth, "", 0)
				}, st.prototype.importDeviceConfig = function(e, t) {
					var s = k(this.CGI.deviceConfig, e.szHttpProtocol, e.szIP, e.iCGIPort);
					return c.HWP_ImportDeviceConfig(s, e.szAuth, t.szFileName, 0)
				}, st.prototype.restart = function(e, t) {
					var s = k(this.CGI.restart, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = new et,
						r = {
							type: "PUT",
							url: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(r, t), I.extend(r, {
						success: function(e) {
							t.success && t.success(e)
						},
						error: function(e, s) {
							t.error && t.error(e, s)
						}
					}), n.setRequestParam(r), n.submitRequest()
				}, st.prototype.restore = function(e, t, s) {
					var n = k(this.CGI.restore, e.szHttpProtocol, e.szIP, e.iCGIPort, t),
						r = new et,
						o = {
							type: "PUT",
							url: n,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(o, s), I.extend(o, {
						success: function(e) {
							s.success && s.success(e)
						},
						error: function(e, t) {
							s.error && s.error(e, t)
						}
					}), r.setRequestParam(o), r.submitRequest()
				}, st.prototype.startUpgrade = function(e, t) {
					var s = k(this.CGI.startUpgrade.upgrade, e.szHttpProtocol, e.szIP, e.iCGIPort),
						n = k(this.CGI.startUpgrade.status, e.szHttpProtocol, e.szIP, e.iCGIPort);
					return c.HWP_StartUpgrade(s, n, e.szAuth, t.szFileName)
				}, st.prototype.set3DZoom = function(e, t, s, n) {
					var r = k(this.CGI.set3DZoom, e.szHttpProtocol, e.szIP, e.iCGIPort, t.iChannelID),
						o = new et,
						i = {
							type: "PUT",
							url: r,
							data: s,
							auth: e.szAuth,
							success: null,
							error: null
						};
					I.extend(i, n), I.extend(i, {
						success: function(e) {
							n.success && n.success(e)
						},
						error: function(e, t) {
							n.error && n.error(e, t)
						}
					}), o.setRequestParam(i), o.submitRequest()
				};
				var nt = function() {};
				nt.prototype._alert = function(e) {
						a.bDebugMode && console.log(e)
					},
					function(t) {
						var s = function(e) {
							this.elems = [], this.length = 0, this.length = this.elems.push(e)
						};
						s.prototype.find = function(e, t) {
							var s = this.elems[this.length - 1].getElementsByTagName(e);
							return this.length = this.elems.push(s), t ? s : this
						}, s.prototype.eq = function(e, t) {
							var s = this.elems[this.length - 1].length,
								n = null;
							return s > 0 && s > e && (n = this.elems[this.length - 1][e]), this.length = this.elems.push(n), t ? n : this
						}, s.prototype.text = function(t) {
							return this.elems[this.length - 1] ? t ? void(e.DOMParser ? this.elems[this.length - 1].textContent = t : this.elems[this.length - 1].text = t) : e.DOMParser ? this.elems[this.length - 1].textContent : this.elems[this.length - 1].text : ""
						}, s.prototype.attr = function(e) {
							if(this.elems[this.length - 1]) {
								var t = this.elems[this.length - 1].attributes.getNamedItem(e);
								return t ? t.value : ""
							}
						}, t.$XML = function(e) {
							return new s(e)
						}
					}(this);
				var rt = function() {};
				rt.prototype.extend = function() {
					for(var e, t = arguments[0] || {}, s = 1, n = arguments.length; n > s; s++)
						if(null != (e = arguments[s]))
							for(var r in e) {
								var o = (t[r], e[r]);
								t !== o && ("object" == typeof o ? t[r] = this.extend({}, o) : void 0 !== o && (t[r] = o))
							}
					return t
				}, rt.prototype.browser = function() {
					var e = /(webkit)[ \/]([\w.]+)/,
						t = /(opera)(?:.*version)?[ \/]([\w.]+)/,
						s = /(msie) ([\w.]+)/,
						n = /(trident.*rv:)([\w.]+)/,
						r = /(mozilla)(?:.*? rv:([\w.]+))?/,
						o = navigator.userAgent.toLowerCase(),
						i = e.exec(o) || t.exec(o) || s.exec(o) || n.exec(o) || o.indexOf("compatible") < 0 && r.exec(o) || ["unknow", "0"];
					i.length > 0 && i[1].indexOf("trident") > -1 && (i[1] = "msie"), "webkit" == i[1] && (i[1] = o.indexOf("chrome") > -1 ? "chrome" : "safari");
					var a = {};
					return a[i[1]] = !0, a.version = i[2], a
				}, rt.prototype.loadXML = function(t) {
					if(null == t || "" == t) return null;
					var s = null;
					if(e.DOMParser) {
						var n = new DOMParser;
						s = n.parseFromString(t, "text/xml")
					} else s = new ActiveXObject("Microsoft.XMLDOM"), s.async = !1, s.loadXML(t);
					return s
				}, rt.prototype.toXMLStr = function(e) {
					var t = "";
					try {
						var s = new XMLSerializer;
						t = s.serializeToString(e)
					} catch(n) {
						try {
							t = e.xml
						} catch(n) {
							return ""
						}
					}
					return -1 == t.indexOf("<?xml") && (t = "<?xml version='1.0' encoding='utf-8'?>" + t), t
				}, rt.prototype.escape = function(e) {
					return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")
				}, rt.prototype.dateFormat = function(e, t) {
					var s = {
						"M+": e.getMonth() + 1,
						"d+": e.getDate(),
						"h+": e.getHours(),
						"m+": e.getMinutes(),
						"s+": e.getSeconds(),
						"q+": Math.floor((e.getMonth() + 3) / 3),
						S: e.getMilliseconds()
					};
					/(y+)/.test(t) && (t = t.replace(RegExp.$1, (e.getFullYear() + "").substr(4 - RegExp.$1.length)));
					for(var n in s) new RegExp("(" + n + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[n] : ("00" + s[n]).substr(("" + s[n]).length)));
					return t
				}, rt.prototype.Base64 = {
					_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
					encode: function(e) {
						var t, s, n, r, o, i, a, c = "",
							u = 0;
						for(e = rt.prototype.Base64._utf8_encode(e); u < e.length;) t = e.charCodeAt(u++), s = e.charCodeAt(u++), n = e.charCodeAt(u++), r = t >> 2, o = (3 & t) << 4 | s >> 4, i = (15 & s) << 2 | n >> 6, a = 63 & n, isNaN(s) ? i = a = 64 : isNaN(n) && (a = 64), c = c + this._keyStr.charAt(r) + this._keyStr.charAt(o) + this._keyStr.charAt(i) + this._keyStr.charAt(a);
						return c
					},
					decode: function(e) {
						var t, s, n, r, o, i, a, c = "",
							u = 0;
						for(e = e.replace(/[^A-Za-z0-9\+\/\=]/g, ""); u < e.length;) r = this._keyStr.indexOf(e.charAt(u++)), o = this._keyStr.indexOf(e.charAt(u++)), i = this._keyStr.indexOf(e.charAt(u++)), a = this._keyStr.indexOf(e.charAt(u++)), t = r << 2 | o >> 4, s = (15 & o) << 4 | i >> 2, n = (3 & i) << 6 | a, c += String.fromCharCode(t), 64 != i && (c += String.fromCharCode(s)), 64 != a && (c += String.fromCharCode(n));
						return c = rt.prototype.Base64._utf8_decode(c)
					},
					_utf8_encode: function(e) {
						e = e.replace(/\r\n/g, "\n");
						for(var t = "", s = 0; s < e.length; s++) {
							var n = e.charCodeAt(s);
							128 > n ? t += String.fromCharCode(n) : n > 127 && 2048 > n ? (t += String.fromCharCode(n >> 6 | 192), t += String.fromCharCode(63 & n | 128)) : (t += String.fromCharCode(n >> 12 | 224), t += String.fromCharCode(n >> 6 & 63 | 128), t += String.fromCharCode(63 & n | 128))
						}
						return t
					},
					_utf8_decode: function(e) {
						for(var t = "", s = 0, n = c1 = c2 = 0; s < e.length;) n = e.charCodeAt(s), 128 > n ? (t += String.fromCharCode(n), s++) : n > 191 && 224 > n ? (c2 = e.charCodeAt(s + 1), t += String.fromCharCode((31 & n) << 6 | 63 & c2), s += 2) : (c2 = e.charCodeAt(s + 1), c3 = e.charCodeAt(s + 2), t += String.fromCharCode((15 & n) << 12 | (63 & c2) << 6 | 63 & c3), s += 3);
						return t
					}
				}, t.prototype.valueOf = function() {
					return this.id
				}, t.prototype.toString = function() {
					return this.id
				}, t.prototype.createUUID = function() {
					var e = new Date(1582, 10, 15, 0, 0, 0, 0),
						s = new Date,
						n = s.getTime() - e.getTime(),
						r = "-",
						o = t.getIntegerBits(n, 0, 31),
						i = t.getIntegerBits(n, 32, 47),
						a = t.getIntegerBits(n, 48, 59) + "1",
						c = t.getIntegerBits(t.rand(4095), 0, 7),
						u = t.getIntegerBits(t.rand(4095), 0, 7),
						l = t.getIntegerBits(t.rand(8191), 0, 7) + t.getIntegerBits(t.rand(8191), 8, 15) + t.getIntegerBits(t.rand(8191), 0, 7) + t.getIntegerBits(t.rand(8191), 8, 15) + t.getIntegerBits(t.rand(8191), 0, 15);
					return o + r + i + r + a + r + c + u + r + l
				}, t.getIntegerBits = function(e, s, n) {
					var r = t.returnBase(e, 16),
						o = new Array,
						i = "",
						a = 0;
					for(a = 0; a < r.length; a++) o.push(r.substring(a, a + 1));
					for(a = Math.floor(s / 4); a <= Math.floor(n / 4); a++) i += o[a] && "" != o[a] ? o[a] : "0";
					return i
				}, t.returnBase = function(e, t) {
					var s = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
					if(t > e) var n = s[e];
					else {
						var r = "" + Math.floor(e / t),
							o = e - r * t;
						if(r >= t) var n = this.returnBase(r, t) + s[o];
						else var n = s[r] + s[o]
					}
					return n
				}, t.rand = function(e) {
					return Math.floor(Math.random() * e)
				}, P = new tt, h = new st, d = new nt, I = new rt;
				var ot = I.dateFormat(new Date, "yyyyMMddhhmmss");
				if(o = "webVideoCtrl" + ot, i = "webVideoCtrl" + ot, "object" != typeof e.attachEvent && I.browser().msie) {
					var it = "<script for=" + o + " event='GetSelectWndInfo(SelectWndInfo)'>GetSelectWndInfo(SelectWndInfo);</script>";
					it += "<script for=" + o + " event='ZoomInfoCallback(szZoomInfo)'>ZoomInfoCallback(szZoomInfo);</script>", it += "<script for=" + o + "  event='GetHttpInfo(lID, lpInfo, lReverse)'>GetHttpInfo(lID, lpInfo, lReverse);</script>", it += "<script for=" + o + "  event='PluginEventHandler(iEventType, iParam1, iParam2)'>PluginEventHandler(iEventType, iParam1, iParam2);</script>", document.write(it)
				}
				return this
			}(),
			s = e.WebVideoCtrl = t;
		s.version = "1.0.5"
	}
}(this);
